倒计时多次调用出现多个倒计时

新手上路,请多包涵

我封装的代码:

function CountDown() {
    var maxtime = 120;
    var timer = setInterval(function () {
        maxtime--;
        var minutes = Math.floor(maxtime / 60);
        var seconds = Math.floor(maxtime % 60);
        if (minutes >= 0) {
            var msg = "倒计时: " + '0' + minutes + "分" + seconds + "秒";
            $('.del-time').html(msg);
        } else {
            clearInterval(timer);
        }
    },1000);
    
}

第一次触发都很正常,再次触发就会有两个时间在交替显示。我估计是maxtime没有释放掉,但我不能刷新页面,所以maxtime一直被定时器调用,调用一次CountDown,就会创建一个maxtime,该怎么办啊。

阅读 2.6k
3 个回答
var CountDownHelper = {
    timer:null,
    do:function(){
        var that = this;
        that.timer&&clearInterval(that.timer);
        var maxtime = 120;
        that.timer= setInterval(function () {
            maxtime--;
            var minutes = Math.floor(maxtime / 60);
            var seconds = Math.floor(maxtime % 60);
            if (minutes >= 0) {
                var msg = "倒计时: " + '0' + minutes + "分" + seconds + "秒";
                $('.del-time').html(msg);
            } else {
                clearInterval(that.timer);
            }
        },1000);
    }
};

//调用这个方法,在每次do的时候清除掉上一次创建的定时器
CountDownHelper.do();
function CountDown() {
    var maxtime = 120;
    var timer = setInterval(function () {
        maxtime--;
        var minutes = Math.floor(maxtime / 60);
        var seconds = Math.floor(maxtime % 60);
        if (minutes >= 0) {
            var msg = "倒计时: " + '0' + minutes + "分" + seconds + "秒";
            $('.del-time').html(msg);
        } else {
            clearInterval(timer);
        }
    },1000);
    // 新增
    return timer;
}

// 第一次使用
var timer = CountDown();

// 再次使用
clearInterval(timer);
timer = CountDown();
新手上路,请多包涵

image.png
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题