我正在使用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);
//});
}
答案 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);
});
对我来说就像一个魅力。
再次,对不起,如果这太晚了。