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

news2024/11/25 12:26:53

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>

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

看到大厂工时爆料,我沉默了。。

大厂工时爆料 今天逛脉脉的时候&#xff0c;看到一篇名为「一人一句&#xff0c;大厂工时爆料」的帖子&#xff1a; 点开之后&#xff0c;我沉默了 ... 出来爆料的基本上都是 10 小时。 好奇心之下&#xff0c;我搜索了一下去年很热的排行榜&#xff1a; 2023 年最新互联网公司…

if constexpr实现条件编译

#include <iostream>// 利用if constexpr实现了条件编译 template<typename T1, typename T2> void test_func() {if constexpr (std::is_same_v<T1, T2>) {std::cout << "hit stage\n";} else {std::cout << "miss\n";} }i…

IDEA 常用技巧

1、代码块整体移动 选中&#xff0c;tab整体右移选中&#xff0c;shifttab整体左 移 2、统一修改变量 3.方法分割线 seting >> editor >> apperance >> show method separators 4、快捷键 构造器、set与get方法、方法重写、toString 等快捷操 鼠标停留在…

启智CV机器人,ROS, ubuntu 18.04

资料&#xff1a; https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 http://wiki.ros.org/melodic/Installation/Ubuntu https://github.com/6-robot/wpb_cv 一、安装ros环境 装VM。 装ubuntu18.04 desktop.…

数字化的本质是什么?

数字化的本质其实就是把日常生活、工作等各个方面的信息、操作、交流等转化成数字形式&#xff0c;让它们更加便于存储、传输、分析和处理。简单说就是把各种各样的东西变成了0和1&#xff0c;让计算机能够更好地理解和运用这些信息。但数字化的本质并不只是简单地把事物变成数…

广告联盟四大家

国内四大广告承接商&#xff1a;①抖音旗下-穿山甲②快手旗下-快手联盟③百度旗下-百青藤④腾讯旗下-优量汇 我们目前在互联网上能看到的所有广告都是由他们发放的&#xff0c;在其中我们打小游戏复活看广告&#xff0c;获得道具看广告&#xff0c;看剧看广告&#xff0c;这…

springboot + Vue前后端项目(第十四记)

项目实战第十三记 写在前面1. 建立字典表2. 后端DictController3. Menu.vue4. 建立sys_role_menu中间表5.分配菜单接口6. 前端Role.vue改动总结写在最后 写在前面 本篇主要讲解动态分配菜单第二章节 菜单页面优化 引入图标 角色界面优化 角色自主分配菜单&#xff0c;并保存至…

透明度技术在AI去衣中的双刃剑作用

引言&#xff1a; 在当今这个数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活中不可或缺的一部分。它不仅改变了我们的工作方式&#xff0c;还影响了我们的娱乐和社交活动。然而&#xff0c;随着AI技术的不断发展&#xff0c;一些伦理问题也逐渐浮出…

Linux:subshell(子shell)和childprocess(子进程)

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 一、预备知识 在进行这个话题之前&#xff0c;首先要了解Linux系统中一个进程是如何创建的&#xff0c;当一个命令被执行时&#xff0c;首先会在当前进程创建一个子进程…

SpringBoot发送Gmail邮件

1. 登录Gmail Gmail网址 点击右上角“小齿轮”&#xff0c;然后点击"查看所有设置" 点击“转发和 POP/IMAP”&#xff0c;按图中设置&#xff0c;然后点击保存&#xff1a; 2. 启用两步验证(https://myaccount.google.com/security) 登录上述网址&#xff0c;找…

msvcp100.dll丢失怎样修复?几种快速有效修复msvcp100.dll丢失的方法

在使用电脑时是不是遇到过关于msvcp100.dll丢失文件丢失的情况&#xff1f;出现这样的情况有什么办法可以将丢失的msvcp100.dll文件快速恢复&#xff1f;今天的这篇文章就将教大家几种能够有效的解决msvcp100.dll丢失问题的方法。 方法一&#xff1a;重启电脑 重启电脑是一种简…

jmeter多用户登录并退出教程

有时候为了模拟更真实的场景&#xff0c;在项目中需要多用户登录并退出操作&#xff0c;大致参考如下 多用户登录前面已经实现&#xff1a;参考博文 多用户登录并退出jmx文件&#xff1a;百度网盘 提取码&#xff1a;0000 一、多用户退出操作 添加一个setUp线程组&#xff0…

基恩士激光 速度 曝光等关系

一、基恩士 CtrlN 二、速度设置 计算扫描速度 曝光时间&#xff1a; 1:1 相机点间隔是0.025 &#xff0c;我们要扫描的图像也是1&#xff1a;1的话&#xff0c;速度可以为 采样周期我们设定为3K&#xff0c;假如我们的7000行就够了 速度V0.025&#xff08;线间隔&#xff0…

YOLOv10全网最新创新点改进系列:YOLOv10改进加入新型高效的多尺度注意力(EMA)模块保留每个通道的信息并减少计算成本!助力v10检测性能遥遥领先!

YOLOv10全网最新创新点改进系列&#xff1a;YOLOv10改进加入新型高效的多尺度注意力&#xff08;EMA&#xff09;模块保留每个通道的信息并减少计算成本&#xff01;助力v10检测性能遥遥领先&#xff01; 所有改进代码均经过实验测试跑通&#xff01; 此项目不低于30种改进&am…

hadoop(1)--hdfs部署(亲测可用)

一、准备&#xff1a; 1、三台集群部署&#xff0c;配置hosts #cat /etc/hosts 192.168.46.128 node1 #nameNode dataNode secondaryNameNode 192.168.46.129 node2 #datanode 192.168.46.130 node3 #datanode说明&#xff1a; NameNode: 主节点管理者 DataNode&…

解决el-dialog里嵌入el-tabs卡死的问题

文章目录 1. 解决 el-dialog 里嵌入 el-tabs 卡死的问题 1. 解决 el-dialog 里嵌入 el-tabs 卡死的问题 今天发现在element ui里面使用 el-dialog 会导致页面卡死&#xff0c;本来我心想这么简单的一个弹窗&#xff0c;怎么会卡死解决思路&#xff1a;以为是项目的问题&#x…

展台搭建时打造完美的展示空间

1、确定主题和目标 在展台设计搭建之前&#xff0c;需要明确展示的主题和目标&#xff0c;包括展示内容、目标观众、品牌形象等。这有助于为展台设计搭建提供明确的方向和指导。 2、精细化设计 展台设计需要精细化&#xff0c;注重每一个细节的把控。包括展台结构、色彩搭配、材…

4. MySQL 约束

文章目录 【 1. 主键约束 PRIMARY KEY 】1.1 在创建表时设置主键约束设置单字段主键在创建表时设置联合主键 1.2 在修改表时添加主键约束1.3 删除主键约束1.4 主键自增长 AUTO_INCREMENT指定自增字段初始值自增字段不连续 【 2. 外键约束 FOREIGN KEY 】2.1 在创建表时设置外键…

探索无限可能:API平台引领数据驱动的新时代

在数字化浪潮的推动下&#xff0c;数据已成为推动商业创新和增长的核心动力。然而&#xff0c;数据的获取、整合和应用并非易事&#xff0c;需要跨越技术、安全和效率等多重挑战。幸运的是&#xff0c;API&#xff08;应用程序接口&#xff09;平台的出现&#xff0c;为我们打开…

使用 Django Model 构建强大的数据库模型

文章目录 创建一个简单的 Django Model迁移数据库使用 Django Shell 操作模型Django Admin结论 在 Django 中&#xff0c;Model 是构建数据库模型的基础。它允许开发人员定义数据的结构&#xff0c;并提供了方便的方式来与数据库进行交互。本文将介绍如何使用 Django Model 来创…