此方法通過(guò)canvas繪制圓形的方法來(lái)實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)進(jìn)度條,直接上代碼,疑問(wèn)請(qǐng)看注釋?zhuān)?/p>
HTML代碼如下, 在頁(yè)面里創(chuàng)建一個(gè)畫(huà)布即可:
<canvas id="canvas" width="300" height="300"> <p>抱歉,您的瀏覽器不支持canvas</p> </canvas>
JS分兩大部分,
第一部分實(shí)現(xiàn)整體功能,第二部分調(diào)用:
第一部分:
第一部分功能原理大概是,畫(huà)兩個(gè)圓,一個(gè)是底色圓,第二個(gè)是動(dòng)態(tài)加載的圓弧,進(jìn)度通過(guò)定時(shí)器加載;顏色加漸變色;
function toCanvas(id ,progress){ canvas進(jìn)度條 var canvas = document.getElementById(id), ctx = canvas.getContext("2d"), percent = progress, 最終百分比 circleX = canvas.width / 2, 中心x坐標(biāo) circleY = canvas.height / 2, 中心y坐標(biāo) radius = 100, 圓環(huán)半徑 lineWidth = 5, 圓形線(xiàn)條的寬度 fontSize = 20; 字體大小 兩端圓點(diǎn) function smallcircle1(cx, cy, r) { ctx.beginPath(); //ctx.moveTo(cx + r, cy); ctx.lineWidth = 1; ctx.fillStyle = '#06a8f3'; ctx.arc(cx, cy, r,0,Math.PI*2); ctx.fill(); } function smallcircle2(cx, cy, r) { ctx.beginPath(); //ctx.moveTo(cx + r, cy); ctx.lineWidth = 1; ctx.fillStyle = '#00f8bb'; ctx.arc(cx, cy, r,0,Math.PI*2); ctx.fill(); } 畫(huà)圓 function circle(cx, cy, r) { ctx.beginPath(); //ctx.moveTo(cx + r, cy); ctx.lineWidth = lineWidth; ctx.strokeStyle = '#eee'; ctx.arc(cx, cy, r, Math.PI*2/3, Math.PI * 1/3); ctx.stroke(); } 畫(huà)弧線(xiàn) function sector(cx, cy, r, startAngle, endAngle, anti) { ctx.beginPath(); //ctx.moveTo(cx, cy + r); // 從圓形底部開(kāi)始畫(huà) ctx.lineWidth = lineWidth; // 漸變色 - 可自定義 var linGrad = ctx.createLinearGradient( circleX-radius-lineWidth, circleY, circleX+radius+lineWidth, circleY ); linGrad.addColorStop(0.0, '#06a8f3'); //linGrad.addColorStop(0.5, '#9bc4eb'); linGrad.addColorStop(1.0, '#00f8bb'); ctx.strokeStyle = linGrad; 圓弧兩端的樣式 ctx.lineCap = 'round'; 圓弧 ctx.arc( cx, cy, r, (Math.PI*2/3), (Math.PI*2/3) + endAngle/100 * (Math.PI*5/3), false ); ctx.stroke(); } 刷新 function loading() { if (process >= percent) { clearInterval(circleLoading); } 清除canvas內(nèi)容 ctx.clearRect(0, 0, circleX * 2, circleY * 2); 中間的字 ctx.font = fontSize + 'px April'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillStyle = '#999'; ctx.fillText(parseFloat(process).toFixed(0) + '%', circleX, circleY); 圓形 circle(circleX, circleY, radius); 圓弧 sector(circleX, circleY, radius, Math.PI*2/3, process); 兩端圓點(diǎn) smallcircle1(150+Math.cos(2*Math.PI/360*120)*100, 150+Math.sin(2*Math.PI/360*120)*100, 5); smallcircle2(150+Math.cos(2*Math.PI/360*(120+process*3))*100, 150+Math.sin(2*Math.PI/360*(120+process*3))*100, 5); 控制結(jié)束時(shí)動(dòng)畫(huà)的速度 if (process / percent > 0.90) { process += 0.30; } else if (process / percent > 0.80) { process += 0.55; } else if (process / percent > 0.70) { process += 0.75; } else { process += 1.0; } } var process = 0.0; 進(jìn)度 var circleLoading = window.setInterval(function () { loading(); }, 20); } 第二部分,調(diào)用封裝好的代碼: toCanvas('canvas',50);
【相關(guān)推薦】
1. Canvas實(shí)現(xiàn)圓形進(jìn)度條并顯示數(shù)字百分比
2. 利用CSS clip 實(shí)現(xiàn)音頻播放圓環(huán)進(jìn)度條教程實(shí)例
3. 分享h5 canvas圓圈進(jìn)度條的實(shí)例代碼
4. H5 canvas實(shí)現(xiàn)圓形動(dòng)態(tài)加載進(jìn)度實(shí)例
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com