实现步骤:

  • 绘制一个圆;
  • 绘制圆环;
  • 绘制进度环;
  • 绘制文字;

一、创建画布

<canvas id='myCanvas' width='200' height='200'></canvas>
复制代码

二、绘制一个圆

var canvas = document.getElementById('myCanvas1');
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(100, 100, 50, 0, 2 * Math.PI, false);
ctx.strokeStyle = 'red';
ctx.stroke();
复制代码

三、绘制圆环:

var canvas = document.getElementById('myCanvas1');
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(100, 100, 50, 0, 2 * Math.PI, false);// new added
ctx.lineWidth = 15;ctx.strokeStyle = 'red';
ctx.stroke();
复制代码

四、绘制进度环

var canvas = document.getElementById('myCanvas1');
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(100, 100, 50, 0, 2 * Math.PI, false);
ctx.lineWidth = 15;
ctx.strokeStyle = 'red';
ctx.stroke();//new added
var startAngle = 3 / 2 * Math.PI; //开始位置弧度
var percentage = 10;  //完成进度值
var diffAngle = percentage / 100 * Math.PI * 2; //完成进度弧度值
ctx.beginPath();
ctx.arc(100, 100, 50, startAngle, diffAngle + startAngle, false);
ctx.strokeStyle = 'green';
ctx.stroke();
复制代码

五、绘制文字

var canvas = document.getElementById('myCanvas1');
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(100, 100, 50, 0, 2 * Math.PI, false);
ctx.lineWidth = 15;
ctx.strokeStyle = 'red';
ctx.stroke();var startAngle = 3 / 2 * Math.PI; //开始位置弧度
var percentage = 10;  //完成进度值
var diffAngle = percentage / 100 * Math.PI * 2; //完成进度弧度值
ctx.beginPath();
ctx.arc(100, 100, 50, startAngle, diffAngle + startAngle, false);
ctx.strokeStyle = 'green';
ctx.stroke();//new added
ctx.fillStyle = '#000';
ctx.textAlign = 'center';
ctx.font = '16px serif';
ctx.fillText(percentage + '%', 100+2, 100+5);
复制代码

六、完整代码

(function (root, factory) {if (typeof define === 'function' && define.amd) {define(factory);// AMD} else if (typeof exports === 'object' && typeof module !== 'undefined') {module.exports = factory(); // CommonJS} else {window.Progressbar = factory(); // Browser globals}
}(this, function () {function Progressbar(options){this.id = options.id;this.value = options.value || 0;this.width = options.width || 200;this.height = options.height || 200;this.bgColor = options.bgColor || 'green';this.barColor = options.barColor || 'red';this.fontColor = options.fontColor || '#000';if(options.init){this.init();}}Progressbar.prototype.init = function(){var canvas = document.getElementById(this.id);if(!canvas.getContext) {throw new Error('your browser does not support canvas')}if(!this.id){throw new Error('your need pass id ')}var width = parseInt(this.width);var height = parseInt(this.height);canvas.setAttribute('width',width);canvas.setAttribute('height',height);var ctx = canvas.getContext("2d");var startAngle = 3 / 2 * Math.PI;var percentage = 0;var diffAngle = 0;var cx = width / 2;var cy = height / 2;var timer = setInterval(draw, 50);var value = this.value;var bgColor = this.bgColor;var barColor = this.barColor;var fontColor = this.fontColor;function draw(){diffAngle = (percentage / 100) * Math.PI * 2;//清除矩形区域ctx.clearRect(0, 0, width, height);ctx.beginPath();//设置线段宽度ctx.lineWidth = 15;//绘制圆ctx.arc(cx, cy, 50, 0, 2 * Math.PI, false);//设置填充色ctx.fillStyle = '#FFF';ctx.fill();//绘制图形轮廓ctx.strokeStyle = bgColor; ctx.stroke();//绘制百分比进度ctx.beginPath();ctx.arc(cx, cy, 50, startAngle, diffAngle + startAngle, false);ctx.strokeStyle = barColor;ctx.stroke();//绘制百分比文字ctx.fillStyle = fontColor;ctx.textAlign = 'center';ctx.font = '16px serif';ctx.fillText(percentage + '%', cx, cy + 6);if (percentage >= value) {clearTimeout(timer);}percentage++;}}return Progressbar;
}));var progressbar1 = new Progressbar({ id: 'myCanvas1',value: 20 ,init: true })
var progressbar2 = new Progressbar({ id: 'myCanvas2',value: 30 ,init: true })
复制代码

查看效果 进度条

参考资料 使用canvas来绘制图形

原文

转载于:https://juejin.im/post/5abb7e196fb9a028d700a87e

使用canvas绘制圆形进度条相关推荐

  1. canvas 绘制圆形进度条

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  2. android绘制环形进度_Android使用Canvas绘制圆形进度条效果

    前言 Android自定义控件经常会用到Canvas绘制2D图形,在优化自己自定义控件技能之前,必须熟练掌握Canvas绘图机制.本文从以下三个方面对Canvas绘图机制进行讲解: 画布Canvas ...

  3. 使用h5 canvas绘制圆形进度条

    创建一个Html容器canvas: <canvas id="myCanvasTag" width="300" height="300" ...

  4. H5 Canvas绘制圆形进度条动画效果

    效果如图 效果比较简单 html结构部分 <canvas id="canvas" width="110" height="110"&g ...

  5. 精通Android自定义View(十二)绘制圆形进度条

    1 绘图基础简析 1 精通Android自定义View(一)View的绘制流程简述 2 精通Android自定义View(二)View绘制三部曲 3 精通Android自定义View(三)View绘制 ...

  6. Android 绘制圆形进度条

    Android 绘制圆形进度条 最近项目上有一些需求,需要绘制圆形的进度条满足设计上和交互上的需求: 实现思路 在画布上直接绘制View,需要了解一下几点 1.需要画一个圆 2.圆圈上有不同进度的颜色 ...

  7. 使用canvas绘制圆环进度条

    使用canvas绘制圆环进度条 技术要求 需要一点点数学基础 需要对 canvas 的常见的方法熟悉 一点点数学基础 已知圆心,半径,角度,求圆上的点坐标 canvas 常见的方法 菜鸟教程 扬帆起航 ...

  8. html数字显示百分比,扣丁学堂html5 教程之Canvas实现圆形进度条并显示数字百分比效果...

    今天扣丁学堂html5培训小编和大家分享一下Canvas实现圆形进度条并显示数字百分比效果示例,对html5感兴趣的小伙伴或者是参加学习的小伙伴可以了解一下. Canvas实现圆形进度条并显示数字百分 ...

  9. html5 canvas绘制圆形进度实例

    2019独角兽企业重金招聘Python工程师标准>>> html5 canvas绘制圆形进度实例 <canvas id="test" width=200 h ...

最新文章

  1. [svc]arp协议的细枝末节
  2. 查找只有一个字母不相同的单词
  3. js阻止ajax继续请求,js 拦截全局 ajax 请求
  4. spring + redis 实现数据的缓存
  5. messagebox 全部使用_「一」Windows API 零门槛编程指南——MessageBox
  6. AI取代人类?这4种工作仍将是从业者的“铁饭碗” | 未来
  7. 数据库MySQL基础---事务相关特性--连接池DBCP--C3P0--JavaBean--DBUtils工具
  8. 用 C# 做人脸检测(基于EmguCV)
  9. origin matlab调用,origin与matlab使用教程
  10. 好的大创计算机类课题,大学大创课题有哪些
  11. python支持多种编程范式吗_理解真格量化的Python编程范式
  12. Carry On My Wayward Son -- Kansas
  13. 参数问题:nested exception is java.lang.NumberFormatException: For input string: “null“,已解决。
  14. HDU 4093 Xavier is Learning to Count FFT + 容斥原理 2011年上海现场赛C题
  15. 一位优秀的学弟,计算机2019保研经历分享(北大信科、清华计算机系)
  16. 华三路由引入配置实验
  17. Selenium自动化测试代理问题
  18. Tunnel命令操作
  19. epoch和iteration的区别
  20. Leetcode-545. Boundary of Binary Tree

热门文章

  1. centos升级mysql到5.5
  2. javaFX中解决填充(拉伸)问题
  3. linux 系统 RRDTool安装方法
  4. jquery实现开关灯
  5. 插件和代码两种方法搞定WordPress回复邮件通知
  6. 几个受益终身的英文缩写
  7. centos 安装 rabbitMq
  8. Android使用磁盘缓存DiskLruCache
  9. Spring5源码解析-Spring中的异步事件
  10. Microsoft 用户体验虚拟化 UE-V 1.0 RC 发布