视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
详解canvas实现圆弧、圆环进度条的实例方法
2020-11-27 15:08:45 责编:小采
文档

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

此方法通过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);

【相关推荐】

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

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

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

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

下载本文
显示全文
专题