JS计时器

最近项目中用到一个功能。发送短信后要有个倒计时提示。最开始直接写到代码里了,其它地方也要用,就想到了重构。

核心代码如下:

1.先接受对象实例化时传入的相应数据。

2.定义对象相应的方法。启动方法、结束方法、定时执行的方法(判断是否时间用完,用完调用结束方法。否则继续。)。

// 计时器开关。
var timerSwitch = false;

function Timer(fun1, times, delay) {
    this.fun1 = fun1;
    this.times = times;
    this.back = times;
    this.delay = delay;
};

Timer.prototype = {
    constructor: Timer,
    intervalId: -1,
    run: function () {
        if (timerSwitch)return;
        timerSwitch = true;
        this.fun1(this);
        this.intervalId = setInterval(this._fun, this.delay, this);
    },
    close: function() {
        window.clearInterval(this.intervalId);
        this.times = this.back;
        this.fun1(undefined);
        timerSwitch = false;
    },
    _fun: function(para) {
        para.times = para.times - 1;
        para.fun1(para);
        if (para.times == 0) {// 最开始我写的是times==1,但发现走到2s的时候1s没有。最后跟好基友分析来分析去才知道1s显示了,不过随即调用了close方法清空了数据。而且还少显示了一秒,然后定为0。看图
            para.close();
            return;
        }
    }
};

调用的时候很简单。传入要执行的函数f1(处理显示),执行的时间,间隔时间1000毫秒。

实例化计时器对象,然后调用run方法。

                $("#ttt").click(function() {
                    $(this).button("disable");
                    var timer = new Timer(f1, 5, 1000);
                    timer.run();
                });
f1种传入了计时器对象,里面有计时器当前时间,可以展示出来。通过对象是否存在来判断时间是否已结束。
            function f1(timer) {
                var res = "";
                if (!timer) {
                    $("#ttt").button("enable");
                    $("#ttt").val("重新发送");
                } else {
                    res = timer.times+"s";
                }
                $("#t1").html(res);
            }

DEMO版本在RunJS上,套了jquerymobile模板。

点击打开链接


还是有些简陋。感觉还有些地方写的有问题。后续慢慢改进。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值