Canvas实现环形进度条

直接上代码:

<canvas width="200" height="200" >60%</canvas>
<canvas width="200" height="200" >20%</canvas>
<canvas width="200" height="200" >50%</canvas>

JS:

   window.onload = function() {
var options = [ //存储颜色数组
{"color1": "#00ff00", "color2": "#db4c3d"},
{"color1": "#669900", "color2": "#3faeca"},
{"color1": "#b34d00", "color2": "#4db07c"}
];
var canvas = document.getElementsByTagName("canvas");
for(var i=0;i<canvas.length;i++) {
var that = canvas[i];
var text = that.innerHTML;
var number=text.substring(0,text.length-1);
var ctx = that.getContext("2d"); //画最下面灰色的圆
ctx.clearRect(0, 0, 200, 200);
ctx.beginPath();
ctx.moveTo(100,100);
ctx.arc(100, 100, 100, 0, 2 * Math.PI, false);
ctx.closePath();
ctx.fillStyle = "#ccc";
ctx.fill(); //画扇形
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.arc(100, 100, 100, 0, 2 * Math.PI * number / 100, false);
ctx.closePath();
ctx.fillStyle = options[i].color1;
ctx.fill(); //环形内部的填充
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.arc(100, 100, 80, 0, 2 * Math.PI, false);
ctx.fillStyle = "#fff";
ctx.fill(); //中间圆
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.arc(100, 100, 60, 0, 2 * Math.PI, false);
ctx.fillStyle = options[i].color2;
ctx.fill(); //填充字体
ctx.font = "30px Arial";
ctx.fillStyle = '#fff';
ctx.fillText(text, 70, 110); }
}

效果图:

很明显起始角不合适

改进如下:

补充:因为在IE下canvas不兼容,使用插件excanvas.js,,excanvas.js实现了大部分canvas的API,在绘图方面其核心是通过IE的VML去实现的,利用IE支持的VML对象来模拟Canvas的绘图的。但是还成存在以下缺陷:在速度上与chrome、firefox、safari浏览器相距甚远。也尝试过用其他方式解决IE问题;方法2种,

第一种:通过判断<dd>标签的数字大小,分为两种,大于50,小于50;而改变dt的宽高;

<div class="canvas">
<dl class="every_canvas">
<dt><img src="2.png" alt=""/></dt>
<dd>60%</dd>
</dl>
<dl class="every_canvas">
<dt><img src="2.png" alt=""/></dt>
<dd>30%</dd>
</dl>
<dl class="every_canvas">
<dt><img src="2.png" alt=""/></dt>
<dd>80%</dd>
</dl>
</div> <style>
dl,dt,dd{
margin:0;padding:0;list-style:none;
}
.every_canvas{
width:110px;height:110px;float:left;background:url('1.png');margin-right:20px;
position:relative;overflow:hidden;
}
.every_canvas dt{
width:0px;height:0px;position:absolute;left:0;top:0;overflow:hidden;
}
.every_canvas dd{
width:63px;height:63px;position:absolute;left:23px;top:23px;background:url('3.png')
}
</style>

js:

if (!document.getElementById("canvas").getContext){            //IE浏览器
$('.every_canvas').each(function(index){ //循环每一个dl
var that=$(this);
var text=that.find('dd').text();
var number=text.substring(0,text.length-1); //去掉%
if(number>50){
that.find('dt').css({
"height":"110px",
"width":100*number/110+"px"
})
}else{
that.find('dt').css({
"height":100*number/110+"px",
"width":100*number/110+"px"
})
}
})
}else{ }

效果图:

   环形太直,,太僵硬

第二种:就是在ps里面,把100%的环形,做10%、20%、30%、40%、50%、60%、70%、80%、90%、出来,js把number分成10类,判断数值,选择不一样的图片。繁琐!

Canvas实现环形进度条的更多相关文章

  1. html5 canvas绘制环形进度条,环形渐变色仪表图

    html5 canvas绘制环形进度条,环形渐变色仪表图                                             在绘制圆环前,我们需要知道canvas arc() 方 ...

  2. canvas绘制环形进度条

    <!DOCTYPE html> <html > <head> <meta http-equiv="content-type" conten ...

  3. canvas 绘制环形进度条

    结果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  4. 使用canvas实现环形进度条

    html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  5. canvas环形进度条

    <style> canvas { border: 1px solid red; margin: 100px; }</style> <canvas id="rin ...

  6. 【css】如何实现环形进度条

    最近团队的童鞋接到了一个有关环形进度条的需求,想要还原一个native的沿环轨迹渐变进度条的效果,看到这个效果的时候,笔者陷入了沉思.. 环形进度条的效果,最先想到的就是使用CSS利用两个半圆的hac ...

  7. 环形进度条的实现方法总结和动态时钟绘制(CSS3、SVG、Canvas)

    缘由: 在某一个游戏公司的笔试中,最后一道大题是,“用CSS3实现根据动态显示时间和环形进度[效果如下图所示],且每个圆环的颜色不一样,不需要考虑IE6~8的兼容性”.当时第一想法是用SVG,因为SV ...

  8. canvas实现半圆环形进度条

    html部分 <canvas id="canvas" width="150" height="150"> <p>抱歉 ...

  9. 用初中数学知识撸一个canvas环形进度条

    周末好,今天给大家带来一款接地气的环形进度条组件vue-awesome-progress.近日被设计小姐姐要求实现这么一个环形进度条效果,大体由四部分组成,分别是底色圆环,进度弧,环内文字,进度圆点. ...

随机推荐

  1. C#异步Async、Task、Await

    参考http://www.cnblogs.com/jesse2013/p/async-and-await.html 事例: static void Main(string[] args) { ; i ...

  2. Swift Method Dispatching — a summary of my talk at Swift Warsaw

    Swift Method Dispatching When announcing Swift, Apple described it as being much faster than Objecti ...

  3. 【剑指Offer】45、扑克牌顺子

      题目描述:   LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到 ...

  4. vue部署到nginx服务下,非根目录,刷新页面404怎么解决?

    nginx配置 location / { proxy_pass http://xxxx; } location /category { root /home/tv; index index.html; ...

  5. (C/C++学习)1.C++中vector的使用

    说明:vector是C++中一个非常方便的容器类,它用于存放类型相同的元素,利用成员函数及相关函数可以方便的对元素进行增加或删除,排序或逆序等等,下面将对这些功能一一叙述. 一.vector的第一种用 ...

  6. 嵌入式linux实现NAT端口映射

    场景: 1.嵌入式linux系统内已经在2个网卡,分别为eth0(内网物理网卡,ip地址:192.168.1.4)以及ppp1(VPN客户端通过PPTP协议拨号生成的虚拟网卡,ip地址:192.168 ...

  7. (22)Spring Boot 拦截器HandlerInterceptor【从零开始学Spring Boot】

    上一篇对过滤器的定义做了说明,也比较简单.过滤器属于Servlet范畴的API,与Spring 没什么关系.     Web开发中,我们除了使用 Filter 来过滤请web求外,还可以使用Sprin ...

  8. Spring Boot-springbootHelloword(一)

    什么是springboot sprng家族一个全新的框架  简化我们应用程序的创建和开发的过程,使用默认配置简化了我们以前传统的配置 springboot的特性     能够快速创建spring程序 ...

  9. chrome js 获取css

    var myDiv = document.getElementById("chooseRect"); var computedStyle = document.defaultVie ...

  10. asp.net-EF-表间关系

    博客推荐 http://www.cnblogs.com/Gyoung/archive/2013/01/17/2864150.html 先学习下这几个方法 Has方法: HasOptional:前者包含 ...