博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js初级应用之svg实现环形进度条
阅读量:6958 次
发布时间:2019-06-27

本文共 1681 字,大约阅读时间需要 5 分钟。

图片描述

整理一个svg绘制环形进度条的demo,需要的同学拿去用即可

定义svg绘图区域

在html页面的任何位置,添加svg绘图面板。定义svg绘图区域大小

绘制一个圆形

cx 和 cy 属性定义圆点的 x 和 y 坐标,单位省略为px,如果省略 cx 和 cy,圆的中心会被设置为 (0, 0),r 属性定义圆的半径,stroke定义描边的颜色,stroke-width定义描边宽度,fill定义填充颜色

定义一个path路径区域

使用path指令绘制扇形

首先查看一下常用的path指令,获取svg中的path,指定半径为100,进度为50,我们绘制一个扇形

  • M = moveto(M X,Y) :将画笔移动到指定的坐标位置

  • L = lineto(L X,Y) :画直线到指定的坐标位置

  • H = horizontal lineto(H X):画水平线到指定的X坐标位置

  • V = vertical lineto(V Y):画垂直线到指定的Y坐标位置

  • A = elliptical Arc(A RX,RY,XROTATION,FLAG1,FLAG2,X,Y):弧线

  • Z = closepath():关闭路径

var path = document.getElementById('ring');    var r=100;    var progress=50;        //将path平移到我们需要的坐标位置    ring.setAttribute('transform', 'translate('+r+','+r+')');        // 计算当前的进度对应的角度值    var degrees = progress * (360/100);          // 计算当前角度对应的弧度值    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 : 0    var lenghty = window.Number(degrees > 180);        //path 属性    var descriptions = ['M', 0, 0, 'v', -r, 'A', r, r, 0, lenghty, 1, x, y, 'z'];        // 给path 设置属性    path.setAttribute('d', descriptions.join(' '));

在扇形上覆盖一个圆形

封装绘图函数

path参数为绘图面板id,progress为进度值0-100,r为半径

function draw(path,progress,r) {    path.setAttribute('transform', 'translate('+r+','+r+')');    var degrees = progress * (360/100);      var rad = degrees* (Math.PI / 180);    var x = (Math.sin(rad) * r).toFixed(2);    var y = -(Math.cos(rad) * r).toFixed(2);    var lenghty = window.Number(degrees > 180);    var descriptions = ['M', 0, 0, 'v', -r, 'A', r, r, 0, lenghty, 1, x, y, 'z'];    path.setAttribute('d', descriptions.join(' '));}

转载地址:http://dzqil.baihongyu.com/

你可能感兴趣的文章
基于 HTML5 Canvas 的 3D 模型列表贴图
查看>>
ORA-00000 这是什么报错!
查看>>
lvs-dr简单配置
查看>>
hadoop配置lzo
查看>>
脚本调试:一次换行符导致的报错
查看>>
mysql 之 主从同步(单向同步和双向同步)
查看>>
Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl
查看>>
经典的MySQL 数据备份校验daemon程序
查看>>
logrotate日志轮询
查看>>
python之扩展
查看>>
Redis有序集合数据类型操作命令
查看>>
nginx+tomcat 动静分离 的配置文件
查看>>
SaltStck无Master和多Master架构
查看>>
ajax asynx:false
查看>>
online游戏服务器架构--网络架构
查看>>
tomcat启动比较慢的解决办法
查看>>
对待实时进程(RT)抢占的问题
查看>>
一个关于组播的网络问题--暂没有时间确定真实原因
查看>>
mac下安装多个版本PHP及切换
查看>>
VIM常用操作和使用方法
查看>>