Canvas实现环形进度条
2024-08-31 08:52:22
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类,判断数值,选择不一样的图片。繁琐!
最新文章
- 未能添加对***.dll的引用 问题解决方法
- 2.mongoDB add user in v3.0 问题的解决(Property &#39;addUser&#39; of object admin is not a func)
- 基于纯 CSS3 技术实现美观的标签云效果
- 能源项目xml文件标签释义--DefaultAdvisorAutoProxyCreator
- Yii2.0 实现三级联动 [ 2.0 版本 ]
- FPGA内部信号避免高阻态
- poj3984迷宫问题
- web页面在微信里打开,字体颜色不正常显示
- android .9图片制作与注意
- 一文入门NodeJS
- pl/sql学习(5): 触发器trigger/事务和锁
- Scala - 快速学习07 - 模式匹配
- 七:python 对象类型详解三:列表
- EWS 流通知订阅邮件
- mysql学习------错误日志和通用查询日志
- 跨系统-跨数据库访问表或创建映射视图-PB访问数据库的特殊处理
- #C++初学记录(初识汉诺塔)
- 【BZOJ2141】排队(树套树)
- Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法
- Keil调试程序如何查看变量
热门文章
- js取最值:
- 团体程序设计天梯赛-练习集-*L1-043. 阅览室
- Django MVC与MTV概念 Ajax、分页实现
- PAT_A1087#All Roads Lead to Rome
- java获取当前日期的前一天,前一月和前一年
- NOIP2013 DAY2 T3火车运输
- windows 下 logstash 安装启动
- Adaptively handling remote atomic execution based upon contention prediction
- 服务器监控(包括性能指标与web应用程序)
- POJ 1984