我正在使用jQuery构建UI选项卡。除了一个问题以外,一切都正常 - 我设置了一个setInterval,它会运行一个函数,该函数会执行trigger("click"),以便在5000毫秒后进入下一个选项卡。它可以顺利地运行每个选项卡,但问题是,如果用户手动单击选项卡,setInterval的计时器不会重新从0开始。例如,如果用户在0毫秒开始于选项卡1,并在2000毫秒时单击选项卡2,则setInterval不会回到0,它将从2000开始,运行到5000毫秒,然后随即进入选项卡3。我理解为什么会发生这种情况,只是想知道是否有一种方法可以重新启动setInterval定时,而无需执行clearInterval()并创建一个全新的setInterval()。任何见解都将不胜感激。
更新
感谢大家的回复-我试图避免使用clearInterval的原因是,我无法找到一种方法来编写代码,以便clearInterval停止setInterval。该代码设置为跟踪用户何时单击选项卡。问题是自动更改函数使用trigger('click'),因此当选项卡自动更改时,它也会运行我编写的clearInterval函数。它似乎可以独立运行得相当好,但一旦用户开始单击选项卡,setInterval的行为就变得不寻常,并且无法预测地切换选项卡。我怀疑正在同时运行几个setInterval......以下是代码(如果你还没有猜到,我对JavaScript / jQuery还比较新手)。我已经注释掉了一些部分,使其可以运行,但仍然不能按照我最初的想法运行。
更新
感谢大家的回复-我试图避免使用clearInterval的原因是,我无法找到一种方法来编写代码,以便clearInterval停止setInterval。该代码设置为跟踪用户何时单击选项卡。问题是自动更改函数使用trigger('click'),因此当选项卡自动更改时,它也会运行我编写的clearInterval函数。它似乎可以独立运行得相当好,但一旦用户开始单击选项卡,setInterval的行为就变得不寻常,并且无法预测地切换选项卡。我怀疑正在同时运行几个setInterval......以下是代码(如果你还没有猜到,我对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);
//});
}