利用SVG的circle可以绘制百分比圆弧,但总觉得有点不够高端,相比起来,我更喜欢利用SVG的path来绘制百分比圆弧,因为其中会利用到绘制圆弧的基本数学知识(我已经把数学还给了老师,从网络上抓取别人的成果,进行了改造),这样就觉得很有装逼范。

###一、效果图

###二、实现方法
页面元素构成

<svg height="108" version="1.1" width="108" xmlns="http://www.w3.org/2000/svg"style="overflow: hidden; position: relative; left: -0.5px;"><path class="ring" rate="${deal.attrs.rate}" fill="none" x="54" y="7" r="47" stroke="#fd30ae" d="M54,7A47,47,0,1,1,11,71" stroke-width="4" />
</svg>

是不是看的有点晕,如果你不熟悉SVG的话,先看svg中path标签的用法,对path的基本属性进行了解。

另外呢,我给path赋予了rate(百分比)、x(moveto的x坐标)、y(moveto的y坐标)、r(圆弧的半径)的属性。

赋值

// 圆弧
$("path.ring", $p).each(function() {var $this = $(this);YUNM.debug('path.ring' + $this.selector);var r = $this.attr("r");var x = $this.attr("x"), rate = $this.attr("rate");// 给path 设置属性if (rate < 100) {var progress = rate / 100;// 将path平移到我们需要的坐标位置$this.attr('transform', 'translate(' + x + ',' + x + ')');// 计算当前的进度对应的角度值var degrees = progress * 360;// 计算当前角度对应的弧度值var rad = degrees * (Math.PI / 180);// 极坐标转换成直角坐标var x = (Math.sin(rad) * r).toFixed(2);var y = -(Math.cos(rad) * r).toFixed(2);// 大于180度时候画大角度弧,小于180度的画小角度弧,(deg > 180) ? 1 : 0var lenghty = window.Number(degrees > 180);// path 属性var descriptions = [ 'M', 0, -r, 'A', r, r, 0, lenghty, 1, x, y ];$this.attr('d', descriptions.join(' '));}
});

这段代码就主要根据圆弧的起始点、半径、圆弧的进度来计算圆弧的终点。这段代码中用到的数学知识我肯定是不记得了,网络上其他程序员提供的demo。

###三、简单改造后的源码,可直接运行

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>HTML5中的SVG属性实现圆形进度条效果</title>
</head>
<body><svg width="500px" height="500px" version="1.1" xmlns="http://www.w3.org/2000/svg">   <path id="ring" fill="none" stroke="#fd30ae" /></svg><script>var path = document.getElementById('ring');var r=100;var progress=0.6;//将path平移到我们需要的坐标位置ring.setAttribute('transform', 'translate('+r+','+r+')');// 计算当前的进度对应的角度值var degrees = progress * 360;  // 计算当前角度对应的弧度值var rad = degrees* (Math.PI / 180);//极坐标转换成直角坐标var x = (Math.sin(rad) * r).toFixed(2);var y = -(Math.cos(rad) * r).toFixed(2);//大于180度时候画大角度弧,小于180度的画小角度弧,(deg > 180) ? 1 : 0var lenghty = window.Number(degrees > 180);//path 属性var descriptions = ['M', 0, -r, 'A', r, r, 0, lenghty, 1, x, y];// 给path 设置属性path.setAttribute('d', descriptions.join(' '));</script>
</body>
</html>

这是网络上其他朋友提供的计算方法,我只做了简单的修改,插入到我的项目中。本篇主要用来推广SVG的path绘制百分比圆弧的方法,希望需要的人能够及早得到帮助,感谢!

SVG path绘制百分比圆弧,给力啊相关推荐

  1. svg path绘制心形_SVG 菜鸟的 Recharts 自定义图表实战

    原文作者:IMWeb团队.未经同意,禁止转载. Recharts 是一款图表处理的类库,利用 React 的特性,重新定义了图表的配置和组合方式,大大地提高了图表自定义样式的灵活度.本文记录了使用 R ...

  2. SVG图形绘制入门第一弹

    IT入门的路超级漫长--任何时候都发现有完全没听过的东西,比如说下方--原来认为svg就是图片,想着也是跟Ps一样画出来的,现在知道了竟然是用代码写的--,这条路我不知道啥时候才能进步到幼儿园的级别! ...

  3. SwiftUI学习笔记[path绘制]

    前言 绘制的底层是强大的,我们所用的各端语言只是在现代UI追求的步伐中和用户喜好的交互中求同存异,抽取封装出自成个性风格的UI控件,当然面对万亿级别的客户各个平台的UI库出也不可能满足所有的客户需求, ...

  4. 使用 Vue SVG 快速绘制曲线图(带动画)

    图表 当接到类似以上需求时,你的第一想法是不是跟我一样,使用 Canvas 来绘制,啥都不说就开始撸代码.如果你是用 Vue 之类的 MVVM 框架,那意味着你得提供一个结点供 Canvas 着陆,同 ...

  5. css svg做动图,用svg动态绘制图形

    以此前对svg的了解,就是通过rect/circle/line--等绘制规则图形,或者利用path路径来绘制更复杂的图形.但是这种绘制是,当我们写好svg的xml文件嵌入html代码,页面载入的时候, ...

  6. 基于svg开发绘制地铁图

    中国地铁图 中国地铁图,基于svg开发,支持PC.移动端多种浏览器.覆盖北上广多个城市. 线上开源地址 https://github.com/StavinLi/the-subway-of-china ...

  7. SVG动态绘制不规则图形

    作者简介 wuyue 蚂蚁金服·数据体验技术团队 在浏览器中,任意的二维平面图形均可以通过path路径的形式描述.然后底层api 直接静态绘制出来.但是如果想动态的绘制路径,浏览器是没有直接支持方式的 ...

  8. QT绘制百分比条形图。

    QT绘制百分比条形图 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 创建简单的百分比条形图. 百分比条形图将数据集中显示为每个类别中所有数据集的百分比. 创建百分比 ...

  9. SVG PATH d参数的 ace

    SVG PATH 的d参数较多,也比较复杂. Moveto Lineto Curveto Arcto ClosePath 这里只打算记录下 Arcto 参数.(https://developer.mo ...

最新文章

  1. 兼容超大图片的处理_动态图适用性调研与兼容性方案
  2. 那些年,我们见过的 Java 服务端乱象
  3. MySQL优化—磁盘事宜
  4. oracle启动的服务有哪些,启动/关闭oracle服务有三种方式
  5. 转换输入文本中的回车和空格
  6. 12-1-顺序文件归并-文件-第12章-《数据结构》课本源码-严蔚敏吴伟民版
  7. Testing - 软件测试知识梳理 - 自动化测试
  8. no判断 python yes_Python 内置类型全解析(1)
  9. C++类对象成员、动态对象、new、delete运算符申请动态空间(C++初学面向对象)
  10. 【转载】身份证号码验证算法
  11. st7735屏幕移植-高清图片显示
  12. 结构体定义LNode,*LinkList和typedef struct
  13. java获取文件编码
  14. LintCode 173:链表插入排序
  15. (信息学奥赛一本通 1299)糖果#线性动态规划#
  16. MFC CStdioFile简单用法
  17. 安卓 chrome html文件,打开Chrome浏览器在本地文件的Android
  18. 算法题_遍历三角矩阵
  19. 多智能体仿真环境NetLogo介绍之导入外部数据
  20. 远程桌面连接时打不开计算机等,远程桌面打不开。怎么办?

热门文章

  1. 富士康东莞1亿美元项目搁浅 平板厂房沦为仓库
  2. MongoDB数据库设计法则
  3. C++ 合成默认构造函数的真相
  4. 认识抖音聊天功能:让你更方便地社交交流
  5. 导包时import花括号{}的作用
  6. 《算法竞赛入门经典》第一章习题答案
  7. iOS开发- 分屏动画
  8. 基于pytorch的BP神经网络实现
  9. gis插入的文本怎么搞成两行_word中关于文本框的使用方法大全
  10. 计算机办公店,办公用品和电脑数码店面装修效果图 2016办公文具店门面及室内布置摆放设计图...