svg实现一个圆形以及方形的环形进度条

1. svg实现圆形进度条

效果图:

1. 写个假接口:

let res = {
        curLegendList: [
            { progress: "87", name: "进度1",color:"#00fe41" },
            { progress: "66", name: "进度2" ,color:"orange"},
            { progress: "50", name: "进度3",color:"#00fe41" },
            { progress: "25", name: "进度4" ,color:"red"},
            { progress: "87", name: "进度1",color:"#00fe41" },
            { progress: "66", name: "进度2" ,color:"orange"},
            { progress: "50", name: "进度3",color:"#00fe41" },
            { progress: "25", name: "进度4" ,color:"red"},
        ]
    }

2. 编写css

  * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: '微软雅黑', sans-serif;
        }


        .container {
            width: 30px;
            height: 30px;
        }

        .zcy_box {
            position: relative;
            width: 250px;
            height: 150px;
            display: flex;
            align-items: center;
            background-color: darkgoldenrod;
        }


        .zcy_box .zcy_percent {
            position: relative;
            width: 150px;
            height: 150px;
        }

        .zcy_box .zcy_percent svg {
            position: relative;
            width: 150px;
            height: 150px;
        }

        .zcy_box .zcy_percent svg circle {
            width: 35px;
            height: 35px;
            fill: none;
            stroke-width: 10;
            stroke: #000;
            transform: translate(5px, 5px);
            stroke-dasharray: 440;
            stroke-dashoffset: 440;
            stroke-linecap: round;
        }


        .zcy_box .zcy_percent .zcy_number {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            display: flex;
            justify-content: center;
            align-items: center;
            color: #767576;
        }

        .zcy_box .zcy_percent .zcy_number h2 {
            font-size: 24px;
        }

        .zcy_box .zcy_percent .zcy_number span {
            font-size: 24px;
        }

        .zcy_box .text {
            font-size: 24px;
            padding: 10px 0 0;
            color: #999;
            font-weight: 400;
            letter-spacing: 1px;
        }

3. 写个公用的js方便调用,可以自己改造

function htmlFunc(name, progress, color) {
        var html = '';
        html += '<div class="zcy_box">';
        html += '<h2 class="text">'+name+'</h2>';
        html += '<div class="zcy_percent">';
        html += '<div class="zcy_number">';
        html += '<h2>'+progress+'<span>%</span></h2>';
        html += '</div>';
        html += '<svg>';
        html += '<circle style="stroke-dashoffset: 0;stroke: #ccc;" cx="70" cy="70" r="40"></circle>';
        html += '<circle style="stroke-dashoffset: calc(440 - (440 * '+progress+')/180);stroke: '+color+';" cx="70" cy="70" r="40"></circle>';
        html += '</svg>';
        html += '</div>';
        html += '</div>';
        return html;
    }

4. 调用js以及传数据进去

let curLegendList = res.curLegendList;
    var curHtml='';
    for(let i=0;i<curLegendList.length;i++){
        curHtml += htmlFunc(curLegendList[i].name,curLegendList[i].progress,curLegendList[i].color);
    }

    $(".app").html(curHtml);
<!DOCTYPE html>
<html lang="en">

<head>


    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>SVG实现圆形进度条</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: '微软雅黑', sans-serif;
        }


        .container {
            width: 30px;
            height: 30px;
        }

        .zcy_box {
            position: relative;
            width: 250px;
            height: 150px;
            display: flex;
            align-items: center;
            background-color: darkgoldenrod;
        }


        .zcy_box .zcy_percent {
            position: relative;
            width: 150px;
            height: 150px;
        }

        .zcy_box .zcy_percent svg {
            position: relative;
            width: 150px;
            height: 150px;
        }

        .zcy_box .zcy_percent svg circle {
            width: 35px;
            height: 35px;
            fill: none;
            stroke-width: 10;
            stroke: #000;
            transform: translate(5px, 5px);
            stroke-dasharray: 440;
            stroke-dashoffset: 440;
            stroke-linecap: round;
        }


        .zcy_box .zcy_percent .zcy_number {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            display: flex;
            justify-content: center;
            align-items: center;
            color: #767576;
        }

        .zcy_box .zcy_percent .zcy_number h2 {
            font-size: 24px;
        }

        .zcy_box .zcy_percent .zcy_number span {
            font-size: 24px;
        }

        .zcy_box .text {
            font-size: 24px;
            padding: 10px 0 0;
            color: #999;
            font-weight: 400;
            letter-spacing: 1px;
        }
    </style>
    <script src="./jquery.min.js"></script>
</head>

<body>
    <div class="app">


        


    </div>

</body>
<script>
    var obj = {
        curLegendList: [
            { progress: "87", name: "进度1",color:"#00fe41" },
            { progress: "66", name: "进度2" ,color:"orange"},
            { progress: "50", name: "进度3",color:"#00fe41" },
            { progress: "25", name: "进度4" ,color:"red"},
            { progress: "87", name: "进度1",color:"#00fe41" },
            { progress: "66", name: "进度2" ,color:"orange"},
            { progress: "50", name: "进度3",color:"#00fe41" },
            { progress: "25", name: "进度4" ,color:"red"},
        ]
    }


    function htmlFunc(name, progress, color) {
        var html = '';
        html += '<div class="zcy_box">';
        html += '<h2 class="text">'+name+'</h2>';
        html += '<div class="zcy_percent">';
        html += '<div class="zcy_number">';
        html += '<h2>'+progress+'<span>%</span></h2>';
        html += '</div>';
        html += '<svg>';
        html += '<circle style="stroke-dashoffset: 0;stroke: #ccc;" cx="70" cy="70" r="40"></circle>';
        html += '<circle style="stroke-dashoffset: calc(440 - (440 * '+progress+')/180);stroke: '+color+';" cx="70" cy="70" r="40"></circle>';
        html += '</svg>';
        html += '</div>';
        html += '</div>';
        return html;
    }

    let curLegendList = res.curLegendList;
    var curHtml='';
    for(let i=0;i<curLegendList.length;i++){
        curHtml += htmlFunc(curLegendList[i].name,curLegendList[i].progress,curLegendList[i].color);
    }

    $(".app").html(curHtml);
    

</script>

</html>

2. svg实现方形进度条

效果图

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jq.js">
    </script>

</head>

<body>
    <div id="app">

    </div>

</body>

<script>
    const circleGirth = 2 * Math.PI * 100 // 圆角的圆的周长
    const width = 100 - 2 * 10 // 正方形的边长
    const girth = circleGirth + 4 * width // 圆角矩形总周长
    
    const dasharray = `${0.60*0.426*0.5 * girth} ${girth}`

    const curHtml = `
    <svg width="120" height="50">
        <rect fill="none" x="10" y="10" rx="10" width="100" height="30" stroke="#ebedf0" stroke-width="5" />
        <rect fill="none" x="10" y="10" rx="10" width="100" height="30" stroke="#50D4AB" stroke-width="5"  stroke-dasharray="${dasharray}"/>
    </svg>
    `;
    $("#app").html(curHtml);

</script>

</html>

五分钟学会各种环形进度条

方形进度条从上面链接改造而来,大家可以去看看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663622.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS鸿蒙学习笔记(25)相对布局 RelativeContainer详细说明

RelativeContainer 简介 前言核心概念官方实例官方实例改造蓝色方块改造center 属性说明参考资料 前言 RelativeContainer是鸿蒙的相对布局组件&#xff0c;它的布局很灵活&#xff0c;可以很方便的控制各个子UI 组件的相对位置&#xff0c;其布局理念有点类似于android的约束…

OpenPCDet

一.简介 源码链接&#xff1a; https://github.com/open-mmlab/OpenPCDethttps://github.com/open-mmlab/OpenPCDet OpenPCDet 是一套基于PyTorch实现的点云3D目标检测代码库。&#xff08;也是个框架&#xff09; 设计思想&#xff1a;点云数据集&#xff08;KITTI、NuSce…

pytorch学习笔记2

首先如果遇到conda找不到包&#xff0c;pip老是超时的情况建议添加一下镜像源 conda的 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ cond…

【C++ | 类】类和对象

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

收银系统源码-千呼新零售2.0【智慧供应链】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货等连锁店使用。 详细介绍请查看下…

为什么String要被设置为不可变的

为什么设置为不可变的 Java 中将 String 设计为不可变的原因有多个&#xff0c;主要涉及到安全、效率、同步和设计哲学 缓存 在我们的JVM中&#xff0c;单独开辟了一个空间来存储Java字符串&#xff0c;就是字符串池 String s1"1234"; String s2"766"; …

iPhone快捷指令之九宫格照片(三)

说明&#xff1a;这个是经过前两章的摸索&#xff0c;在我搞明白怎么接共享表单里的数据和会使用变量后&#xff0c;制作出来的终极九宫格照片指令&#xff0c;同一个指令在主屏幕里点击可以选择图片做九宫格图片&#xff1b;在相册里选择图片&#xff0c;点击分享按钮&#xf…

Kotlin 2.0 重磅发布! 性能提升!新功能上线!开发者必看!

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

C++ 关系运算

一 关系运算 二 关系运算符 三 关系表达式 四 关系表达式的值-------逻辑值 五 运算的优先级 六 注意事项 七 总结

【ai】pycharm安装github copilot解决chat一直无法初始化loading的问题

github copilot github-copilot 插件安装后:在工具里找到它 底部也有它 侧边可以chat 更新到2014.1.2copilot 也是最新但是chat 就是一直无法loading成功显示一直在初始化copilot中fix :

Python | Leetcode Python题解之第119题杨辉三角II

题目&#xff1a; 题解&#xff1a; class Solution:def getRow(self, rowIndex: int) -> List[int]:row [1, 1]if rowIndex < 1:return row[:rowIndex 1]elif rowIndex > 2:for i in range(rowIndex - 1):row [row[j] row[j 1] for j in range(i 1)]row.inser…

一、大模型推理

https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://github.com/hiyouga/LLaMA-Factory/blob/main/examples/README_zh.md 安装 v7.1 https://github.com/hiyouga/LLaMA-Factory/releases/tag/v0.7.1 git clone --depth 1 https://github.com/hiyoug…

自动化安装Nginx

1. 指定版本号和用户&#xff1b; 2. 确定安装目录&#xff1b; 3. 确定安装编译模块&#xff1b; 4. 安装相关依赖&#xff1b; 5. 下载源码包并解压&#xff1b; 6. 编译安装&#xff1b; 7. 文件授权及临时文件清理。 #!/bin/bash# 用户输入的Nginx版本号NGIN…

基于深度学习的端到端语音识别时代

随着深度学习的发展&#xff0c;语音识别由DNN-HMM时代发展到基于深度学习的“端到端”时代&#xff0c;这个时代的主要特征是代价函数发生了变化&#xff0c;但基本的模型结构并没有太大变化。总体来说&#xff0c;端到端技术解决了输入序列长度远大于输出序列长度的问题。 采…

【深度学习基础】使用Pytorch搭建DNN深度神经网络与手写数字识别

目录 写在开头 一、DNN的搭建 问题描述与数据集 神经网络搭建 模型训练 模型评估 模型复用 二、手写数字识别 任务描述 数据集 神经网络搭建 模型训练 模型评估 写在最后 写在开头 本文将介绍如何使用PyTorch框架搭建深度神经网络模型。实现模型的搭建、模…

《HelloGitHub》第 98 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

PostgreSQL 远程登录postgres用户不需要密码?免密登录权限设置

PostgreSQL 安装之后&#xff0c;发现登录postgres用户时不需要密码。原因配置远程IP时&#xff0c;IP 地址对应的 method 设置成了 trust。 今天安全测试反馈&#xff0c;pgsql有弱口令问题&#xff0c;于是上去改了pgsql的密码&#xff0c;结果问题还没解决。查看了具体的问…

PyQt5开发笔记:1.环境搭建与界面美化

推荐视频教程&#xff1a; https://www.bilibili.com/video/BV1LT4y1e72X?p23&vd_source7ab611f3afb3d469faad93d3996f99ba 一、打开网址&#xff0c;点击下载 https://build-system.fman.io/qt-designer-download 下载后&#xff0c;点开exe 不推荐&#xff1a;http…

VSCODE 常用快捷键

快捷按键 注释 CTRL /CTRL KSHIFT ALT A取消注释 CTRL /CTRL KSHIFT ALT A搜索文件 Ctrl P移动到某一行 Ctrl g打开一个新窗口 Ctrl Shift N关闭窗口 Ctrl Shift W新建文件 Ctrl N文件间切换 Ctrl Tab全部文件搜索 Ctrl Shift F全屏 F11 打开文件出现中文乱码 文件右下角…

JavaScript的内存管理机制

No.内容链接1Openlayers 【入门教程】 - 【源代码示例300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3Cesium 【入门教程】 - 【源代码图文示例200】 4MapboxGL【入门教程】 - 【源代码图文示例150】 5前端就业宝典 【面试题详细答案 1000】 文章目录 一、内存…