canvas绘制百分比圆环进度条
开发项目,PM会跟踪项目进度;完成某个事情,也可以设置一个完成的进度。
这里用canvas绘制一个简单百分比圆环进度条。
看下效果:
1. 动画方式
2. 静默方式
贴上代码,仅供参考
/**
* LBS drawRing
* Date: 2015-04-24
* ==================================
* opts.parent 插入到哪里 一个JS元素对象
* opts.width 宽度 = 2* (半径+弧宽)
* opts.radius 半径
* opts.arc 弧宽
* opts.perent 百分比
* opts.color 弧渲染颜色 [底色,进度色]
* opts.textColor 文字渲染颜色
* opts.textSize 文字渲染大小
* opts.animated 是否以动画的方式绘制 默认false
* opts.after 绘制完成时执行函数
* ==================================
**/ function drawRing(opts) {
var _opts = {
parent: document.body,
width: 100,
radius: 45,
arc: 5,
perent: 100,
color: ['#ccc', '#042b61'],
textColor: '#000',
textSize: '14px',
animated: false,
after: function() {}
}, k;
for (k in opts) _opts[k] = opts[k]; var parent = _opts.parent,
width = _opts.width,
radius = _opts.radius,
arc = _opts.arc,
perent = parseFloat(_opts.perent),
color = _opts.color,
textSize = _opts.textSize,
textColor = _opts.textColor,
c = document.createElement('canvas'),
ctx = null,
x = 0,
animated = _opts.animated,
after = _opts.after; parent.appendChild(c);
ctx = c.getContext("2d");
ctx.canvas.width = width;
ctx.canvas.height = width; function clearFill() {
ctx.clearRect(0, 0, width, width);
} function fillBG() {
ctx.beginPath();
ctx.lineWidth = arc;
ctx.strokeStyle = color[0];
ctx.arc(width / 2, width / 2, radius, 0, 2 * Math.PI);
ctx.stroke();
} function fillArc(x) {
ctx.beginPath();
ctx.lineWidth = arc;
ctx.strokeStyle = color[1];
ctx.arc(width / 2, width / 2, radius, -90 * Math.PI / 180, (x * 3.6 - 90) * Math.PI / 180);
ctx.stroke();
} function fillText(x) {
ctx.font = textSize + ' Arial';
ctx.fillStyle = textColor;
ctx.textBaseline = "middle";
ctx.textAlign = 'center';
ctx.fillText(x.toFixed(1) + '%', width / 2, width / 2);
} function fill(x) {
fillBG();
fillArc(x);
fillText(x);
} if (!animated) return fill(perent); fill(x);
!function animate() {
if (++x > perent) return after && after();
setTimeout(animate, 10);
clearFill();
fill(x);
}();
}
很简单的一段代码
先创建一个canvas画布对象,设置宽高。
var c = document.createElement('canvas');
document.body.appendChild(c);
var ctx = c.getContext("2d");
ctx.canvas.width = width;
ctx.canvas.height = width;
圆环由两部分组成,底部灰色完整的环,根据百分比变动的环。
先绘制底部完整的环。
//起始一条路径
ctx.beginPath();
//设置当前线条的宽度
ctx.lineWidth = 10; //10px
//设置笔触的颜色
ctx.strokeStyle = '#ccc';
//arc() 方法创建弧/曲线(用于创建圆或部分圆)
ctx.arc(100, 100, 90, 0, 2 * Math.PI);
//绘制已定义的路径
ctx.stroke();
重点理解:canvas arc() 方法 :HTML5 canvas arc() 方法
arc方法默认是从3点钟方向(90度)开始绘制的,一般要把这个开始处设置平常习惯的0点方向。
也需要理解弧度和角度的互相转换。
degrees = radians * 180/Math.PI
角度等于弧度乘于180再除于PI radians = degrees * Math.PI/180
弧度等于角度度乘于PI再除于180
绘制根据百分比变动的环。
ctx.beginPath();
ctx.lineWidth = 10;
ctx.strokeStyle = '#f30';
//设置开始处为0点钟方向(-90 * Math.PI / 180)
//x为百分比值(0-100)
ctx.arc(100, 100, 90, -90 * Math.PI / 180, (x * 3.6 - 90) * Math.PI / 180);
ctx.stroke();
绘制中间的文字
ctx.font = '40px Arial';
ctx.fillStyle = '#f30';
ctx.textBaseline = 'middle';
ctx.textAlign = 'center';
ctx.fillText('50.0%', 100, 100);
到此一个静止的百分比圆环进度条就绘制完成了。
不满足于绘制静态的,动态的更生动有趣一些。
canvas动态绘制就是在一段时间内:绘制一个区域的内容,清除这个区域内容,再重新绘制内容,重复这个过程(绘制-清除-绘制)。
有兴趣可以去研究一下,上面的代码也可以参考,如果结合动画函数和运动公式可以绘制更生动的百分比圆环进度条哦。
--------------------------------------------
参考:
canvas绘制百分比圆环进度条的更多相关文章
- canvas 绘制动态圆环进度条
由于使用的是vue开发,所以就展示一下绘制函数好了,上图是效果图 drawMain(drawing_elem, percent, forecolor, bgcolor) { /* @drawing_e ...
- Vue/React圆环进度条
数据展示,一直是各行各业乐此不疲的需求,具体到前端开发行业,则是各种各种图表数据展示,各种表格数据展示,烦不胜烦(繁不胜繁)! 前几天刚做了折线图.柱状图.饼状图之类的图表数据展示效果,今天又碰到了类 ...
- css3 制作圆环进度条
引子 移动端做一个 loadiing 加载的图标,跟以往沿用的都不太一样,是一个圆环进度条,圆环进度条也就罢了,还得能用百分比控制. CSS3 实现圆环 demo 刚开始写这个圆环的时候是参照帖子上给 ...
- 两种CSS3圆环进度条详解
晚上睡觉之前,我抽了1个多小时,研究了一下圆环进度条,结合从网上查阅的资料,我终于掌握了两种圆环的生成方法. 这次的效果就是单纯的CSS3效果,也没有写具体的JS,等以后有时间在好好整理一下吧~. 第 ...
- 简单实用的纯CSS百分比圆形进度条插件
percircle是一款简单实用的纯CSS百分比圆形进度条插件.你不需要做任何设置,只需要按该圆形进度条插件提供的标准HTML结构来编写代码,就可以生成一个漂亮的百分比圆形进度条. 首先要做的就是引入 ...
- svg实现圆环进度条
开源实现:https://github.com/lugolabs/circles 自行实现:圆环与svg画布间剩的空间太多. <!DOCTYPE html> <html> &l ...
- CSS3实现圆环进度条
摘要:圆环进度条被应用于各个场景,比如我们可以用来表示加载进度等.通常我们可以用 css3 的动画去实现. 详解 css3 实现圆环进度条 简单的画一个圆环,我们都知道如何使用 css 画一个圆环.( ...
- 浅谈一下关于使用css3来制作圆环进度条
最近PC端项目要做一个这样的页面出来,其他的都很简单,关键在于百分比的圆环效果.我最初打算是直接使用canvas来实现的,因为canvas实现一个圆是很简便的. 下面贴出canvas实现圆环的代码,有 ...
- Android 自定义view --圆形百分比(进度条)
转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50334595 注:本文由于是在学习过程中写的,存在大量问题(overdraw onDr ...
随机推荐
- Linux段管理,BSS段,data段,.rodata段,text段
近期在解决一个编译问题时,一直在考虑一个问题,那就是Linux下可执行程序执行时内存是什么状态,是依照什么方式分配内存并执行的.查看了一下资料.就此总结一下,众所周知.linux下内存管理是通过虚存管 ...
- hdu 4888 Redraw Beautiful Drawings 最大流
好难好难,将行列当成X和Y,源汇点连接各自的X,Y集,容量为行列的和,相当于从源点流向每一行,然后分配流量给每一列,最后流入汇点,这样执意要推断最后是否满流,就知道有没有解,而解就是每一行流向每一列多 ...
- Unity3d之MiniJson与LitJson之间的较量
由于项目不得不用到json来解析服务器端传来的数据,于是不得不选择一种在unity3d上面可用的json.开始根据网上推荐LitJson,于是下载下来源码,导入项目: 经过测试可以用:但是移植到ipa ...
- C++基础知识---static const初始化成员变量
为了限制常数的范围class中.你必须要做出成为class成员:而要确保这是丝毫不亚于有一个恒定的实体.你必须要做出成为static员: Class Gameplayer { Private: Sta ...
- MySQLdb 连接Mysql 数据库出错解决
#coding=utf-8 import MySQLdb if __name__ == "__main__": db = MySQLdb.connect(host=<sp ...
- thinkphp框架的相关总结
参考链接地址:http://gongwen.sinaapp.com/article-205.html 1. 模板中不能使用的标签 {$content} {$i} 2. If标签 如: <if c ...
- 安装ArcGIS License 10.1 许可管理器 破解版 服务启动又失败的解决办法
安装破解文件的提示执行 替换许可管理器Bin下面的service.txt 文件,之后会发现,许可管理器启动不了(有时候又可以,挺郁闷), 经过多次的试验,我找到了一种折中解决的方法,供大家参考 解决 ...
- SharePoint采用BCS开发第一个应用程序(两)
SharePoint采用BCS开发第一个应用程序(两) 创建外部数据源 在本章中,我们使用AdventureWorksLT2008 SQL Server数据库作为外部数据源.下图显示了表SalesLT ...
- Nagios+pnp4nagios+rrdtool 安装配置为nagios添加自定义插件(三)
nagios博大精深,可以以shell.perl等语句为nagios写插件,来满足自己监控的需要.本文写mysql中tps.qps的插件,并把收集到的结果以图形形式展现出来,这样输出的结果就有一定的要 ...
- 学了Java 你未必知道这些
作为一个正奔跑向编程完美天堂的朝圣者,本人觉得在平常的编程中,应该要做到以下几点: 一:汝应注释,这样做既方便别人,也方便自己去读懂代码的逻辑 二:注重细节,为自己写的每行代码负责,比如,在并发编程的 ...