前提:有時候在項目中會有用到進度條的狀況,使用css3也能夠實現,可是對於性能很差的設備,或者網絡很差的狀況下,卡頓現象很是明顯,避免出現不流暢的尷尬狀況,因此記錄一下,使用canvas來實現的方法。css
效果圖:css3
DOM中,首先定義canvas畫板元素: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!瀏覽器
接下來是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基礎,應該就能夠了。性能