环形表示进度 css+js+svg

news/2024/9/22 19:31:24/文章来源:https://www.cnblogs.com/ly5926/p/18333337

先看看我做出来的效果

人狠话不多 直接上代码
html部分

<div id="box"></div>

css部分

  #box{width: 400px;height: 400px;background-color: #00E8D7;display: flex;}.circleBox{width: 33.333%;display: flex;flex-direction: column;align-items: center;justify-content: center;}.circleContent{height: 58px;position: relative;width: 58px;}.circleContent + div{font-size: 14px;color: #333333;font-weight: 600;margin-top: 10px;}.smallCircle{font-size: 17px;color: #333333;font-weight: 600;text-align: center;width: 50px;height: 50px;line-height: 50px;background-color: #ffffff;position: absolute;top: 4px;left: 4px;border-radius: 50%;z-index: 3;}.bigCircle{width: 58px;height: 58px;background-color: #dbdbdb;position: absolute;border-radius: 50%;z-index: 1;}

js部分

getLatePercentageNewByJsCss(['40%','70%','0%','100%'],'#2C67E2',58,58,29)function getLatePercentageNewByJsCss(percentage,color,width,height,r) {let len = percentage.lengthlet appendDom = document.getElementById('box')appendDom.innerHTML = ''let domList = []for (let i = 0; i < len; i++) {domList.push('<div class="circleBox">')domList.push('<div class="circleContent">')domList.push('<div class="bigCircle"></div>')domList.push(generatePieSvg(width,height,r,color,percentage[i]))domList.push('<div class="smallCircle">'+percentage[i]+'</div>')domList.push('</div>')domList.push('</div>')}appendDom.innerHTML = domList.join('')
}//画svg的方法function generatePieSvg(width,height,R, color,percent){if(percent == '0%') return '';//0%if(percent == '100%'){//100%return `<svg width="${width}" height="${height}" style="position: absolute;z-index: 2"><circle cx="${R}" cy="${R}" r="${R}" stroke="${color}" stroke-width="1" fill="${color}" /></svg>`}//0% - 100% 扇形用svg来画let svg = ''svg += '<svg style="position: absolute;z-index: 2" width=' + width + ' height=' +height+ '  viewBox="0 0 '+ width  + " " + height + '"' +'>'let M = 'M '+ R +',' + R + ' 'let L = 'L ' + R + ',' + 0  + ' 'let Astart = 'A ' + R + ' ' + R + ' '+ 0 + ' '+ (parseInt(percent) >= 50 ? 1:0) + ' '+ 1 + ' ';//x-axis-rotation large-arc-flag sweep-flag// large-arc-flag 大于180时 为1  表示大圆环   sweep-flag 1 顺时针 0 逆时针let x = caculateX(R,percent)let y = caculateY(R,percent)let Aend = x  + ',' + y  + ' 'let Z = 'Z'svg +='<path d="' + M + L + Astart + Aend + Z + '"' + ' fill=' + color +'>'+'</path>'svg +='</svg>'return svg}function caculateX(r,percent){if(parseInt(percent) >= 75){let angle = 360 - parseInt(percent) * 360 / 100return r - r * Math.sin(angle * Math.PI / 180)}else if(parseInt(percent) >= 50){let angle = 270 - parseInt(percent) * 360 / 100return r - r * Math.cos(angle * Math.PI / 180)}else if(parseInt(percent) >= 25){let angle = 180 - parseInt(percent) * 360 / 100return r + r * Math.sin(angle * Math.PI / 180)}else{let angle = 90 - parseInt(percent) * 360 / 100return r + r * Math.cos(angle * Math.PI / 180)}}function caculateY(r,percent){if(parseInt(percent) >= 75){let angle = 360 - parseInt(percent) * 360 / 100return r - r * Math.cos(angle * Math.PI / 180)}else if(parseInt(percent) >= 50){let angle = 270 - parseInt(percent) * 360 / 100return r + r * Math.sin(angle * Math.PI / 180)}else if(parseInt(percent) >= 25){let angle = 180 - parseInt(percent) * 360 / 100return r + r * Math.cos(angle * Math.PI / 180)}else{let angle = 90 - parseInt(percent) * 360 / 100return r * Math.sin(angle * Math.PI / 180)}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卡特兰数(Catalan)

1.简介: 卡特兰数是组合数学中一个常出现于各种计数问题中的数列。 十以内的卡特兰数,方便打表找规律,稍微记记。 1 2 5 14 42 132 429 1430 4862 16796 2.catalan递推式子 (1)点击查看代码 #include<bits/stdc++.h> using namespace std;#define int long long con…

数据可视化在智慧园区中能够发挥什么作用?

在智慧园区的建设和管理中,数据可视化技术正发挥着越来越重要的作用。通过数据可视化,园区管理者可以将大量复杂的数据转化为直观、易懂的图形和图表,从而更高效地监控和分析园区内的各种动态。数据可视化不仅能够实时展示园区内的人员流动、能耗情况、安全状况等关键指标,…

【学习笔记】并查集应用

【学习笔记】并查集应用 以 NOI 2001 食物链 为例の两种并查集用法。 题目大意: 规定每只动物有且仅有三种可能的种类 \(A、B、C\),\(A\) 会吃 \(B\),\(B\) 会吃 \(C\),\(C\) 会吃 \(A\)。 给定 \(N\) 只动物,\(K\) 个语句。每个语句有如下两种可能的表达:1 X Y 表示动物…

《NET CLR via C#》---第三章(运行时解析类型引用)

"运行时"解析类型引用首先在"C:\Users\LH89\source\repos"目录下,新建Console1工程(C#控制台)实现简单的代码,并编译为程序集(假定名为Program.exe)using System;public class Program {static void Main(string[] args){Console.WriteLine("Hell…

2024“钉耙编程”中国大学生算法设计超级联赛(3) 1005 数论

题意:分析: 远看数论题,实则是道数据结构。 记 \(f_{i}\) 表示 \(r_{k}=i\) 的方案数,\(g_{i}\) 表示 \(l_{1}=i\) 的方案数,那么运用简单容斥,可得: \[ans_{x} = (\sum_{i=1}^{n} f_{i}) - ((\sum_{i=1}^{x-1}f_{i})+1) \times ((\sum_{i=x+1}^{n}g_{i})+1)+1 \]先考虑…

金蝶云星空历史库存信息批量计算生成

一、业务背景今天是2024年07月30日,系统2024年01月01日启用,导入初始库存。 二、需求背景需要快速查询库存组织=供应链中心下,某仓库某物料的库存数。后面还需要按照过去时间范围查询每一天的库存量以监控变化。 三、参考《库存汇总表》《库存余额》《库存账龄分析》《物料收…

使用 useSeoMeta 进行 SEO 配置

title: 使用 useSeoMeta 进行 SEO 配置 date: 2024/7/30 updated: 2024/7/30 author: cmdragon excerpt: 摘要:本文介绍了Nuxt3中的useSeoMeta组合函数,用于简化和优化网站的SEO配置。通过这个工具,开发者可以在Nuxt3项目中方便地设置页面元标签,包括标题、描述以及Open …

史上最便宜的服务器

史上最便宜的服务器:免费空间 10米永久使用,不过空间容量只有100M 提示:不是广告,有时候需要用的时候找老半天,干脆做个随笔记录

格式举例

文章目录a markdown unordered list which will be replaced with the toc, * 号前面和后面需要有个空格。文本 这是一个段落,我要把它设置为蓝色,只需在前面的标签上嵌入style属性即可,style用于内联css。 to bold text, use <strong>. to italicize text, use <e…