详解canvas实现圆弧、圆环进度条的实例方法

ID:8109 / 打印

下面总结了自己在项目中的圆形进度条效果的实现方式,希望对大家有帮助:

此方法通过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 = &#39;#06a8f3&#39;;                     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 = &#39;#00f8bb&#39;;                      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 = &#39;#eee&#39;;                      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, &#39;#06a8f3&#39;);                     //linGrad.addColorStop(0.5, &#39;#9bc4eb&#39;);                     linGrad.addColorStop(1.0, &#39;#00f8bb&#39;);                      ctx.strokeStyle = linGrad;                      圆弧两端的样式                     ctx.lineCap = &#39;round&#39;;                     圆弧                     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 + &#39;px April&#39;;                      ctx.textAlign = &#39;center&#39;;                      ctx.textBaseline = &#39;middle&#39;;                      ctx.fillStyle = &#39;#999&#39;;                      ctx.fillText(parseFloat(process).toFixed(0) + &#39;%&#39;, 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(&#39;canvas&#39;,50);

【相关推荐】

1. Canvas实现圆形进度条并显示数字百分比

2. 利用CSS clip 实现音频播放圆环进度条教程实例

3. 分享h5 canvas圆圈进度条的实例代码

4. H5 canvas实现圆形动态加载进度实例

上一篇: H5动画--canvas绘制圆环百分比进度的实例
下一篇: H5 canvas实现圆形动态加载进度实例

作者:admin @ 24资源网   2024-09-18

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。