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);
複製代碼
好,完美。
--完--