使用svg 绘制动态进度环,这里使用svg 中的path实现效果,和定时器制作动态环加载
效果如下:
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML5 中SVG属性path实现动态绘制圆形进度条效果</title>
</head>
<body>
<svg width="500px" height="500px" version="1.1" xmlns="http://www.w3.org/2000/svg">
<circle cx="200" cy="200" r="100" stroke="#DCDCDC" stroke-width="18" fill="none"/>
<text id="conText" x="160" y="200" fill="red" style="font-size: 20px">测试</text>
<path id="ring" fill="none" stroke="red" stroke-width="15"/>
</svg>
<script>
window.onload = function() {
// 参数说明
/*
** pre 绘制的环的进行度
*/
var pre = 80
draw(pre)
function drawCrice(deg) {
var path = document.getElementById('ring');
var r=100;
var progress=deg/100;
//将path平移到我们需要的坐标位置
ring.setAttribute('transform', 'translate('+2*r+','+2*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);
var lenghty = window.Number(degrees > 180);
//path 属性
if (x == '-0.00') {
x = '-0.01'
}
var descriptions = ['M', 0, -r, 'A', r, r, 0,lenghty, 1, x, y];
// 给path 设置属性
path.setAttribute('d', descriptions.join(' '));
}
// 画圆
function draw(pre){
var text = document.getElementById('conText')
text.innerHTML = ''
for(var i=0;i<=pre;i++){
(function(){
var j=i;
setTimeout(function(){
drawCrice(j);
text.innerHTML = '测试'+ j + '%';
},j*20)
})()
}
}
}
</script>
</body>
</html>
此进度环比较基础,大家使用时候可以进行js调整布局,这里就不在里面进行讲述
备注:如需转载请备注出处,如有问题欢迎大家评论沟通