canvas 实现环形进度条canvas
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext("2d");
var drawCircle = (o) => {
ctx.beginPath();
ctx.lineWidth = o.lineWidth
ctx.arc(o.x, o.y, o.radius, 1.5 * Math.PI, (1.5 + (o.angle * 2)) * Math.PI,false);
ctx.lineCap = 'round';
ctx.strokeStyle = o.color
ctx.stroke();
ctx.closePath();
}
drawCircle({
angle: 1,
color: '#1F67A5',
lineWidth: 3,
x: 50,
y: 50,
radius: 30,
})
drawCircle({
angle: 0.1,
color: '#FFDF00',
lineWidth: 6,
x: 50,
y: 50,
radius: 30,
})
复制代码
核心就是ctx.arc函数bash
ctx.arc(o.x, o.y, o.radius, 1.5 * Math.PI, (1.5 + (o.angle * 2)) * Math.PI,false);
复制代码
前两个是中心坐标 也就是 x和y
第三个是半径
第三个和第四个是开始和结束的角度
最后是是否顺时针函数
了解了核心,那么咱们来试试实现上面的效果。spa
var drawCircle = (o) => {
ctx.beginPath();
ctx.lineWidth = o.lineWidth
ctx.arc(o.x, o.y, o.radius, 0, Math.PI * 0.5,false);
ctx.strokeStyle = o.color
ctx.stroke();
ctx.closePath();
}
drawCircle({
angle: 0.1,
color: '#FFDF00',
lineWidth: 6,
x: 50,
y: 50,
radius: 30,
})
复制代码
运行结果code
???cdn
怎么不太对,圆角哪里去了,起点怎么变成右方。blog
既然核心函数没有圆角,那么就是别的地方设置。get
找女友同样找就能够找到string
ctx.lineCap = 'round';
复制代码
这行代码,加上去后就有了圆角。it
可是起点不太对啊。效果图是从顶部开始。
这时候咱们须要看下面这张宝图
能够看到。0是在右方,而1.5才是开始,因而咱们先设置开始为 1.5 * Math.PI
有了开始,咱们须要结束
由于开始是1.5。因而须要设置偏移量1.5,可是这时候咱们发现一圈是2,这样很差计算,因而须要转成1,等下方便传入百分比,因而这样写 (1.5 + (angle * 2)) * Math.PI
如今angle是多少,咱们就会正确显示
因此代码
ctx.arc(o.x, o.y, o.radius, 1.5 * Math.PI, (1.5 + (o.angle * 2)) * Math.PI,false);
复制代码
好,完美。
--完--