利用canvas實現環形進度條
阿新 • • 發佈:2020-11-26
前提:有時候在專案中會有用到進度條的情況,使用css3也可以實現,但是對於效能不好的裝置,或者網路不好的情況下,卡頓現象非常明顯,避免出現不流暢的尷尬情況,所以記錄一下,使用canvas來實現的方法。
效果圖:
DOM中,首先定義canvas畫板元素:
<canvas id="canvas" width="500" height="500" style="background:#F7F7F7;">
<p>you browser not support canvas!</p>
</canvas>
對於不支援canvas的瀏覽器則會顯示:you browser not support canvas!
廣州VI設計公司https://www.houdianzi.com
接下來是js編寫:
定義canvas.js並在頁面引入
var canvas = document.getElementById('canvas'), //獲取canvas元素
context = canvas.getContext('2d'), //獲取畫圖環境,指明為2d
centerX = canvas.width / 2, //Canvas中心點x軸座標
centerY = canvas.height / 2, //Canvas中心點y軸座標
rad = Math.PI * 2 / 100, //將360度分成100份,那麼每一份就是rad度
speed = 0.1; //載入的快慢就靠它了
//繪製藍色外圈
function blueCircle(n) {
context.save();
context.beginPath();
context.strokeStyle = "#49f";
context.lineWidth = 12;
context.arc(centerX, centerY, 100, -Math.PI / 2, -Math.PI / 2 + n * rad, false);
context.stroke();
context.restore();
}
//繪製白色外圈
function whiteCircle() {
context.save();
context.beginPath();
context.strokeStyle = "#A5DEF1";
context.lineWidth = 12;
context.arc(centerX, centerY, 100, 0, Math.PI * 2, false);
context.stroke();
context.closePath();
context.restore();
}
//百分比文字繪製
function text(n) {
context.save();
context.fillStyle = "#F47C7C";
context.font = "40px Arial";
context.textAlign = "center";
context.textBaseline = "middle";
context.fillText(n.toFixed(0) + "%", centerX, centerY);
context.restore();
}
//動畫迴圈
(function drawFrame() {
window.requestAnimationFrame(drawFrame, canvas);
context.clearRect(0, 0, canvas.width, canvas.height);
whiteCircle();
text(speed);
blueCircle(speed);
if (speed > 100) speed = 0;
speed += 0.1;
}());
window.requestAnimationFrame(drawFrame, canvas);
每行程式碼的註釋標註非常清楚,如果還有不理解的可以去看canvas基礎,應該就可以了。