HTML5简单进度环插件

前几天做了一个进度条的插件,今天我用HTML5的arc做一个简单的进度环的插件。
代码演示
其实很简单的,同样,我们先用一个实例:
配置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怎么实现的呢?
其实很简单,不说多了,直接上代码

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);
                }
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ftytotop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值