前几天做了一个进度条的插件。今天我用HTML5的arc做一个简单的进度环的插件。

代码演示

事实上非常easy的。相同,我们先用一个实例:

配置js代码

 var setting = {
id: "canvas",//画布id 不可省略
raduis:"30",//进度环半径
x: 90,//进度环圆心x坐标
y: 90,//进度环圆心y坐标
width: 10,//进度环宽度
time: 100,//进度刷新时间间隔 可省略 默觉得1000毫秒
foregroundColor: "black",
backgroundColor: "blue",
runFunction: function () {
return 2;
},//每次变化的速率 度数
endFunction: function () {//结束时调用的函数
//alert("end");
},
startFunction: function () {//结束时调用的函数
//alert("start");
},
showText: true
}

初始化

 initProgressRing(setting);

html代码

<div class="context">
<canvas id="canvas"></canvas>
</div>

这样就完毕了一个简单的进度环。当然。得引入initProgressRing.js

script type="text/javascript" src="initProgressRing.js"></script>

以下我们看initProgressRing怎么实现的呢?

事实上非常easy。不说多了。直接上代码

function initProgressRing(setting) {
var initProgressRing = {};
initProgressRing.all = 0;
initProgressRing.startY = Math.PI;
initProgressRing.endY1 = initProgressRing.startY + 2 * Math.PI;
initProgressRing.endY2 = initProgressRing.startY - 2 * Math.PI;
//调用開始函数
if (setting.startFunction) {
setting.startFunction();
}
//初始化默认值函数
initProgressRing.initSet = function (set) {
if (!set.counterclockwise) {
set.counterclockwise = false;
}
if (!set.time) {
set.time = 1000;
}
if (!set.width) {
set.width = 10;
}
if (!set.backgroundColor) {
set.color = "red";
}
if (!set.foregroundColor) {
set.color = "blue";
}
if (!set.radius) {
set.radius = 10;
}
return set;
}
//初始化默认值
setting = initProgressRing.initSet(setting);
//刷新函数
initProgressRing.remainTime = function () {
initProgressRing.all += setting.runFunction();
initProgressRing.startY += 2 * Math.PI / 360 * setting.runFunction();
initProgressRing.text = Math.round((initProgressRing.all / 360 * 10000) / 100) + "%";
//推断结束
if (initProgressRing.startY > initProgressRing.endY1 || initProgressRing.startY < initProgressRing.endY2) {
initProgressRing.text = "100%";
clearInterval(initProgressRing.run);
if (setting.endFunction) {
setting.endFunction();//调用结束函数
}
}
initProgressRing.draw(setting.x, setting.y, setting.raduis, setting.width, setting.backgroundColor, setting.foregroundColor, setting.counterclockwise); }
//初始化画布,调用刷新函数
if (setting.id) {
initProgressRing.canvas = document.getElementById(setting.id);
console.log(setting.id);
initProgressRing.context = initProgressRing.canvas.getContext("2d");
initProgressRing.run = setInterval(initProgressRing.remainTime, setting.time);//1000为1秒钟
} else {
alert("初始化错误,没有id");
}
//画进度条
initProgressRing.draw = function draw(x, y, raduis, width, backgroundColor, foregroundColor, counterclockwise) {
//清除内容
initProgressRing.context.clearRect(0, 0, canvas.width, canvas.height);
initProgressRing.context.lineWidth = width;
initProgressRing.context.beginPath();
initProgressRing.context.strokeStyle = backgroundColor;
initProgressRing.context.arc(x, y, raduis, 0, 2 * Math.PI, false);
initProgressRing.context.stroke();
initProgressRing.context.beginPath();
initProgressRing.context.strokeStyle = foregroundColor;
initProgressRing.context.arc(x, y, raduis, Math.PI, initProgressRing.startY, counterclockwise);
initProgressRing.context.stroke();
if (setting.showText) {
console.log(initProgressRing.text);
initProgressRing.context.fillText(initProgressRing.text, x - 7, y+5, 40);
}
}
}

最新文章

  1. android ImageView网络图片加载、动态设置尺寸、圆角..
  2. ACM/ICPC 之 DFS+SPFA-贪心+最短路(POJ2679)
  3. hive 内部表和外部表的区别和理解
  4. 【SSM 6】Spring+SpringMVC+Mybatis框架搭建步骤
  5. FZU xxx游戏(拓扑排序+暴力)
  6. ODBC连接发生错误:未发现数据源名称并且未指定默认驱动程序
  7. Spring框架学习(二)
  8. [转] 解决HttpServletResponse输出的中文乱码问题
  9. LCLFramework框架之开发约束
  10. css模板之 web模板一
  11. IE 中开发,兼容与性能测试工具汇总
  12. poj 百练 2765 八进制小数(精度问题)
  13. Spring+SpringMVC+MyBatis整合进阶篇(四)RESTful实战(前端代码修改)
  14. Java程序员的现代RPC指南
  15. Net包管理NuGet(1)nuget的使用方法
  16. github访问很慢解决方案
  17. XV Open Cup named after E.V. Pankratiev. GP of Siberia-Swimming
  18. 利用Django实现webUI展示
  19. 毕业不到一年,绩效打了个D!
  20. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十五):Spring Security 版本

热门文章

  1. 在MVC中使用泛型仓储模式和依赖注入实现增删查改
  2. python3连接Mairadb数据库
  3. asp.net学习指南
  4. C++ 浅析 STL 中的 list 容器
  5. POJ1390 Blocks 【动态规划】
  6. c++面向对象程序设计 谭浩强 第一章答案
  7. 4.matlab基础
  8. C#、SQL中的事务
  9. 有关PHP数组
  10. JS中innerHTML/outerHTML和innerText/outerText以及value 的区别与使用