站長資訊網
最全最豐富的資訊網站

H5動畫–canvas繪制圓環百分比進度的實例

1.效果圖

H5動畫--canvas繪制圓環百分比進度的實例
2.原理
第一步繪制一個整圓顏色自定義,第二部繪制一個內圓,其半徑要小于外圓顏色自定
最后一步按照百分比繪制第三個圓,顏色自定。
要實現動態繪制第三步的效果,只要添加一個定時器的功能,每隔一段時間繪制一段距離,設定一個閥值
當大于這個閥值得時候就清空這個定時器,這個閥值其實就是要顯示的百分比值。每次繪制0.01.
注意:在定時器內繪制時,要把第二步繪制內圓,空白圓也在定時器中繪制。

3.知識點
繪制公式:arc(x, y, radius, startRad, endRad, anticlockwise)
在canvas畫布上繪制以坐標點(x,y)為圓心、半徑為radius的圓上的一段弧線。這段弧線的起始弧度是startRad,結束弧度是endRad。這里的弧度是以x軸正方向(時鐘三點鐘)為基準、進行順時針旋轉的角度來計算的。anticlockwise表示是以逆時針方向還是順時針方向開始繪制,如果為true則表示逆時針,如果為false則表示順時針。anticlockwise參數是可選的,默認為false,即順時針。

4.js源代碼

<script src="jquery.min.js"></script><script>function circleProgress(value,average){      var canvas = document.getElementById("yuan");    var context = canvas.getContext('2d');    var _this = $(canvas),      value= Number(value),// 當前百分比,數值      average = Number(average),// 平均百分比      color = "",// 進度條、文字樣式      maxpercent = 100,//最大百分比,可設置      c_width = _this.width(),// canvas,寬度      c_height =_this.height();// canvas,高度      // 判斷設置當前顯示顏色      if( value== maxpercent ){          color="#29c9ad";      }else if( value> average ){          color="#27b5ff";      }else{          color="#ff6100";      }    // 清空畫布      context.clearRect(0, 0, c_width, c_height);    // 畫初始圓      context.beginPath();    // 將起始點移到canvas中心      context.moveTo(c_width/2, c_height/2);    // 繪制一個中心點為(c_width/2, c_height/2),半徑為c_height/2,起始點0,終止點為Math.PI * 2的 整圓      context.arc(c_width/2, c_height/2, c_height/2, 0, Math.PI * 2, false);      context.closePath();      context.fillStyle = '#ddd'; //填充顏色      context.fill();    // 繪制內圓      context.beginPath();      context.strokeStyle = color;      context.lineCap = 'square';      context.closePath();      context.fill();      context.lineWidth = 10.0;//繪制內圓的線寬度        function draw(cur){          // 畫內部空白            context.beginPath();            context.moveTo(24, 24);            context.arc(c_width/2, c_height/2, c_height/2-10, 0, Math.PI * 2, true);            context.closePath();            context.fillStyle = 'rgba(255,255,255,1)';  // 填充內部顏色          context.fill();        // 畫內圓          context.beginPath();        // 繪制一個中心點為(c_width/2, c_height/2),半徑為c_height/2-5不與外圓重疊,          // 起始點-(Math.PI/2),終止點為((Math.PI*2)*cur)-Math.PI/2的 整圓cur為每一次繪制的距離          context.arc(c_width/2, c_height/2, c_height/2-5, -(Math.PI / 2), ((Math.PI * 2) * cur ) - Math.PI / 2, false);          context.stroke();        //在中間寫字            context.font = "bold 18pt Arial";  // 字體大小,樣式          context.fillStyle = color;  // 顏色          context.textAlign = 'center';  // 位置          context.textBaseline = 'middle';            context.moveTo(c_width/2, c_height/2);  // 文字填充位置          context.fillText(value+"%", c_width/2, c_height/2-20);          context.fillText("正確率", c_width/2, c_height/2+20);      }    // 調用定時器實現動態效果      var timer=null,n=0;    function loadCanvas(nowT){          timer = setInterval(function(){              if(n>nowT){                  clearInterval(timer);              }else{                  draw(n);                  n += 0.01;              }          },15);      }      loadCanvas(value/100);      timer=null;  };   </script>

最后需用調用circleProgress這個方法,并把相應的參數穿進去。博主是這樣寫的,通過點擊按鈕觸發。。。

<input onclick="circleProgress(10,50)" value="畫圓" type="button"><canvas id="yuan"></canvas>

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
精品久久久久久中文字幕无码| 国产精品免费一区二区三区四区| 精品国产亚洲第一区二区三区| 91热成人精品国产免费| 亚洲国产精品无码AAA片| 99久久精品国产高清一区二区 | 亚洲精品国产高清不卡在线| 日韩一级精品视频在线观看| 国产精品另类激情久久久免费| 香蕉久久精品国产| 国产微拍精品一区二区| 亚洲精品无码成人| 中文人妻熟妇乱又伦精品| 国产福利91精品一区二区三区| 99re最新地址精品视频| 久久久99精品免费观看| 久热青青青在线视频精品| 精品乱人伦一区二区三区| 日韩精品在线观看| 99久久免费国产精品热| 久久久人妻精品无码一区| 精品日韩在线视频一区二区三区 | 久久精品国产清自在天天线| 国产国拍亚洲精品福利| 国产精品美女久久久久av爽| 国产精品国产高清国产专区| 国产精品男男视频一区二区三区| 亚洲精品tv久久久久| 亚洲欧洲久久久精品| 国产精品高清在线| 久久国产精品免费一区| 91精品视频网站| 国产区精品一区二区不卡中文| 国产亚洲精品a在线无码| 国产女人精品视频国产灰线| 国产成人亚洲精品青草天美| 久久无码专区国产精品| 欧洲成人午夜精品无码区久久| 杨幂国产精品福利在线观看| 人妻少妇精品视频二区| 55夜色66夜色国产精品|