在Javascript / jQuery中重启setInterval()(不带clearInterval)

时间:2010-12-01 19:17:10

标签: javascript jquery timer setinterval eventtrigger

我正在使用jQuery构建的ui标签。一切都有效,除了一个问题 - 我做了一个setInterval运行一个触发器(“click”)的函数,以便它在5000毫秒后进入下一个标签。它可以很好地运行每个选项卡,问题是如果用户手动单击选项卡,则setInterval的计时器不会在0处重新启动。例如,如果用户在0毫秒时在tab1上启动并在tab2处单击2000毫秒,setInterval不会回到0,它将从2000开始并运行到5000毫秒,然后转到tab3。我理解为什么会这样,我只是想知道是否有办法重新启动setInterval时序而不必执行clearInterval()并创建一个全新的setInterval()。任何见解都将不胜感激。

更新

感谢回复 - 我试图避免使用clearInterval的原因是因为我遇到了如何以clearInterval完全停止setInterval的方式编写代码的问题。代码设置为在用户单击选项卡时进行跟踪。问题是自动更改功能使用触发器('click'),因此当选项卡自动更改时,它也运行我写的clearInterval函数。它本身运行起来相当不错,但是一旦用户开始单击选项卡,setInterval就会表现异常并且无法预测地切换选项卡。我怀疑发生的事情是几个setIntervals同时运行......这是代码(如果你还没有猜到它,我在javascript / jquery上很新)。我已经注释掉了它的功能,但它仍然无法正常工作(从第一篇文章开始)。

// auto change tabs
            if( options.interval ) {

                function timerCom() {
                    if( !$(".controller").hasClass('paused') ) {
                        var i = $(".tab-current > a").attr("rel");
                        //alert(i);
                        if( i == 3 ) {i = 0};
                        $container
                            .find('a')
                            .eq(i)
                            .trigger('click');
                    }    
                }

                //$("#promo-items > li > a").click(function () {
                    //var timer;
                    //if( timer != null ) {clearInterval(timer);}
                    timer = setInterval(timerCom, options.interval);

                //});

            }

4 个答案:

答案 0 :(得分:8)

不,在没有清除计时器的情况下,无法重新启动由setInterval设置的计时器。

答案 1 :(得分:3)

你无法真正改变间隔或超时,只能清除它们。也就是说创建一个清除间隔的函数应该是一件简单的事情,然后立即以新的时间值启动一个新的但相同的函数。

var intervalID;
var resetTimer = function() {
  if (intervalID) { clearInterval(intervalID) };
  intervalID = setInterval(function() {
    console.log('doing stuff!');
  }, 5000);
};

答案 2 :(得分:1)

timer = setInterval(function() {
  timerCom();
}, options.interval);

答案 3 :(得分:0)

我知道这个帖子已经超过2年了,但我刚刚遇到了类似的问题,我找到了解决方案。

我正在编写一个图像滚动条,它会在一段时间后自动切换到下一个图像,每当我点击导航按钮时,转换都会移动一次。

这是我的解决方案:

使区间变量(在您的情况下为timer)有点全局。

即。在options部分(假设它已在前面定义,然后再分配),添加一个空timer变量。

var options = {
'interval',
//Other variables
'timer',
};

然后,在处理点击事件时,请致电clearInterval两次。

$("#promo-items > li > a").click(function () {

if( options.timer != null ) {
clearInterval(options.timer);
clearInterval(options.timer);
}

options.timer = setInterval(timerCom, options.interval);

});

对我来说就像一个魅力。

再次,对不起,如果这太晚了。