html部分

<canvas id="canvas" width="150" height="150"><p>抱歉,您的浏览器不支持canvas</p>
</canvas>

js部分

toCanvas('canvas','red',30);/***  生成环形进度条*/function toCanvas(id, color, progress) {//canvas进度条var canvas = document.getElementById(id),ctx = canvas.getContext("2d"),percent = progress, //最终百分比circleX = canvas.width / 2, //中心x坐标circleY = canvas.height / 2, //中心y坐标radius = 60, //圆环半径cradius = 75, // canvas半径lineWidth = 6, //圆形线条的宽度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 = '#fff';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.strokeStyle = color;//圆弧两端的样式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(cradius + Math.cos(2 * Math.PI / 360 * 120) * radius, cradius + Math.sin(2 * Math.PI / 360 * 120) *radius, 0);smallcircle2(cradius + Math.cos(2 * Math.PI / 360 * (120 + process * 3)) * radius, cradius + Math.sin(2 * Math.PI /360 * (120 + process * 3)) * radius, 2);//控制结束时动画的速度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);}

转载于:https://www.cnblogs.com/duanyue/p/10476443.html

canvas实现半圆环形进度条相关推荐

  1. 基于canvas 2D实现微信小程序自定义组件-环形进度条

    基于canvas 2D实现微信小程序自定义组件-环形进度条 最近开发一个小程序项目博闻金榜答题小程序,需要使用到一个可以显示答题倒计时的组件,基于进度条实现,下面就主要介绍基于canvas2D实现一个 ...

  2. 进度条上的小圆点怎么做_傲视网:【AE教程】如何制作环形进度条(第一讲)...

    原标题:傲视网:[AE教程]如何制作环形进度条(第一讲) 大家好,福利来啦!这里将分享如何制作环形进度条,教你如何从入门到精通学AE. 环形进度条是个特殊的动画,在旋转的基础上还要选择性地显示部分区域 ...

  3. android canvas_Android 自定义View篇(七)实现环形进度条效果

    前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...

  4. 仿MIUI音量变化环形进度条实现

    Android中使用环形进度条的业务场景事实上蛮多的,比方下载文件的时候使用环形进度条.会给用户眼前一亮的感觉:再比方我大爱的MIUI系统,它的音量进度条就是使用环形进度条,尽显小米"为发烧 ...

  5. 自定义控件——环形进度条

    系统提供的环形进度条无法显示进度,且不会停止转动,所以要用到能显示进度的进度条时,只能自己定义一个控件. API Demos里面有提供类似的画法,API Demos --> Graphics - ...

  6. 环形进度条ProgressBar

    效果 代码: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color ...

  7. Android花样loading进度条(四)-渐变色环形进度条

    背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们对配文字环形进度条稍加变换,将圆环颜色改为渐变色的形式,使得进 ...

  8. Android花样loading进度条(二)-简单环形进度条

    背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们从圆形进度条讲起,讲简单形式的环形进度条,只有进度色彩,没有进 ...

  9. 自定义环形进度条RoundProgressBar

    一.效果图: Canvas画圆环说明: 圆环宽度不必在意,只是画笔宽度设置后达到的效果. 二.实现步骤 1.自定义View-RoundProgressBar 2.设置属性resources(decle ...

最新文章

  1. pyqt5程序发生错误不中断_关于Windows页面错误的一些基础概念
  2. 清华计算机学院新成立,清华AI更进一步:清华大学成立人工智能国际治理研究院...
  3. vue父组件传值给字组件
  4. 【很详细】JDK安装与环境变量配置
  5. 智伴机器人课文跟读哪里有_火了!智伴机器人竟然出现在2018年高考试卷
  6. 经典商务未来科技海报PSD分层模板,以后绝对用得上
  7. java.net.BindException: Address already in use解决方法
  8. 我在51cto博客安家了!
  9. 更改电脑外部串口端口COM号
  10. FreeBSD下MongoDB数据库的安装
  11. 官方文档——一篇文章弄懂Flutter中的布局
  12. 《WF编程》系列之15 - 顺序工作流与SequenceActivity 3 顺序工作流
  13. vue路由钩子函数(进入和离开钩子函数)
  14. Adobe Flash Builder 四 序列号
  15. 防火墙和IPS有什么区别
  16. 给UILabel中的文字加删除线
  17. STM32开发(14)----CubeMX配置ADC
  18. Anolis OS 8.2 RC2 发行,支持飞腾、海光、兆芯、鲲鹏等芯片
  19. 大叔遇上御姐丈母娘【十】
  20. CANVAS drawImage 绘图图片模糊已解决

热门文章

  1. 笔记:用EXCEL计算收益(复利)
  2. Swift-函数的理解
  3. Android平台Qt开发入门教程
  4. YUV与像素值之间的关系
  5. Android应用开发 led 驱动层 hal硬件抽象层 应用层 详细教程记录(含源码)
  6. apache站点优化—数据压缩
  7. S7 Linux用户管理及用户信息查询命令
  8. getter和setter
  9. mysql报错排查总结
  10. Tomcat多实例和负载均衡