中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

canvas實現圓弧、圓環進度條的案例分析

發布時間:2020-10-26 09:12:40 來源:億速云 閱讀:136 作者:小新 欄目:web開發

這篇文章主要介紹了canvas實現圓弧、圓環進度條的案例分析,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

此方法通過canvas繪制圓形的方法來實現動態圓環進度條,直接上代碼,疑問請看注釋:

HTML代碼如下, 在頁面里創建一個畫布即可:  

<canvas id="canvas" width="300" height="300">
    <p>抱歉,您的瀏覽器不支持canvas</p>
 </canvas>

JS分兩大部分,
第一部分實現整體功能,第二部分調用:
第一部分:
  第一部分功能原理大概是,畫兩個圓,一個是底色圓,第二個是動態加載的圓弧,進度通過定時器加載;顏色加漸變色;

 function toCanvas(id ,progress){                canvas進度條
                var canvas = document.getElementById(id),
                ctx = canvas.getContext("2d"),
                percent = progress,  最終百分比                circleX = canvas.width / 2,  中心x坐標                circleY = canvas.height / 2,  中心y坐標                radius = 100, 圓環半徑                lineWidth = 5,  圓形線條的寬度                fontSize = 20; 字體大小
                 兩端圓點
                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();
                 }                 畫圓
                 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();
                 }                 畫弧線
                 function sector(cx, cy, r, startAngle, endAngle, anti) {
                     ctx.beginPath();                     //ctx.moveTo(cx, cy + r); // 從圓形底部開始畫                     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內容                     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);
                     兩端圓點                     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);                     控制結束時動畫的速度
                     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;  進度
                 var circleLoading = window.setInterval(function () {
                     loading();
                 }, 20);
                     
            }
第二部分,調用封裝好的代碼:
            toCanvas('canvas',50);

感謝你能夠認真閱讀完這篇文章,希望小編分享canvas實現圓弧、圓環進度條的案例分析內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梅河口市| 东阳市| 安泽县| 广元市| 瑞昌市| 张家界市| 贵溪市| 安达市| 中卫市| 镇赉县| 鹤壁市| 肥东县| 嘉黎县| 绥德县| 焦作市| 平利县| 马鞍山市| 鹿泉市| 玉田县| 乌鲁木齐县| 盐津县| 杭锦后旗| 佳木斯市| 平武县| 高雄市| 龙海市| 壤塘县| 古丈县| 竹溪县| 汉中市| 隆尧县| 驻马店市| 工布江达县| 伊春市| 通化市| 庄浪县| 汕头市| 西乌珠穆沁旗| 桐庐县| 临清市| 突泉县|