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#第十四节课

    函数的调用 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...

  2. 使用canvas截图网页为图片并解决跨域空白以及模糊问题

    前几天给了个需求对浏览器网页进行截图,把网页统计数据图形表等截图保存至用户本地. 首先对于网页截图,我用的是canvas实现,获取你需要截图的模块的div,从而使用canvas对你需要的模块进行截图. ...

  3. 开机进入GRUB不要慌,命令行也可启动Linux

    1. 首先利用ls命令,找到Ubuntu安装在哪个磁盘分区: 比如输入ls后我的机器列出的磁盘分区信息如下: (hd0),(hd1),(hd1,gpt3),(hd1,gpt2),(hd1,gpt1) ...

  4. 06.系统编程-4.多线程和GIL

    为什么有人会说 Python? 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程.多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋? 有同 ...

  5. phpstrom 汉化

    -- ---------- _--------------------------------------------------- ------------------- ----- ------- ...

  6. oculus network error ovr53225466

    最近调试oculus,搬运代码到win10平台,发现最近FB对oculus的服务程序进行了更新,必须要登陆账号才能进行调试. 于是安装oculusclient,但是登陆的过程中出现了问题,如果不用代理 ...

  7. NOIP2017总结与反思

    手动博客搬家: 本文发表于20180213 00:01:05, 原地址https://blog.csdn.net/suncongbo/article/details/79319556 //由于12月生 ...

  8. QT5.5移植全攻略【转】

    一.编译1.到www.qt.io下载源码,qt-everywhere-opensource-src-5.5.0 2.设置编译器或者说平台.编译器是通过xplatform参数指定的,xplatform后 ...

  9. java反射意义

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  10. HDU 4500

    哈哈,好爽好爽,刷水题报复社会啦... 哥这次省赛一定要拿一等奖,让你小看我,让你小看我.... #include <iostream> #include <cstdio> # ...