JavaScript中的循环定时器

我需要执行一段JavaScript代码,每个2000毫秒。

setTimeout('moveItem()',2000) 

上述将在2000毫秒后执行一个函数,但不会再执行一次。

所以在我的moveItem函数中我有:

 function moveItem() { jQuery(".stripTransmitter ul li a").trigger('click'); setInterval('moverItem()',2000); } 

这是行不通的,因为我想执行触发器,单击jQuery每段2000毫秒的代码片段,但是现在它一直被调用,脚本需要被中断。 此外,我觉得这是非常糟糕的质量编码…你们如何解决这个问题?

请注意, setTimeoutsetInterval是非常不同的function:

  • setTimeout会在超时后执行一次代码。
  • setInterval会在提供的超时间隔内永远执行代码。

这两个函数都会返回一个可用于中止超时的计时器ID 。 您只需将该值存储在variables中,并分别将其用作参数clearTimeout(tid)clearInterval(tid)

所以,根据你想要做什么,你有两个有效的select:

 // set timeout var tid = setTimeout(mycode, 2000); function mycode() { // do some stuff... tid = setTimeout(mycode, 2000); // repeat myself } function abortTimer() { // to be called when you want to stop the timer clearTimeout(tid); } 

要么

 // set interval var tid = setInterval(mycode, 2000); function mycode() { // do some stuff... // no need to recall the function (it's an interval, it'll loop forever) } function abortTimer() { // to be called when you want to stop the timer clearInterval(tid); } 

两者都是实现这一目标的常见方式。

 setInterval(moveItem, 2000); 

是每2秒执行一次moveItem函数方法。 你的代码中的主要问题是你在调用setInterval而不是在callback之外。 如果我明白你想要做什么,你可以使用这个:

 function moveItem() { jQuery('.stripTransmitter ul li a').trigger('click'); } setInterval(moveItem, 2000); 

注意:不要将string传递给setTimeoutsetInterval – 最佳做法是传递匿名函数或函数标识符(如上所述)。 此外,请小心不要混用单引号和双引号。 挑一个,坚持下去。

我相信你正在寻找setInterval()

它应该是:

 function moveItem() { jQuery(".stripTransmitter ul li a").trigger('click'); } setInterval(moveItem,2000); 

setInterval(f, t)t毫秒调用一次参数函数f

这里用html代码自动循环function。 我希望这可能对某人有用。

 <!DOCTYPE html> <html> <head> <style> div { position: relative; background-color: #abc; width: 40px; height: 40px; float: left; margin: 5px; } </style> <script src="jquery-latest.js"></script> </head> <body> <p><button id="go">Run »</button></p> <div class="block"></div> <script> function test() { $(".block").animate({left: "+=50", opacity: 1}, 500 ); setTimeout(mycode, 2000); }; $( "#go" ).click(function(){ test(); }); </script> </body> </html> 

小提琴: DEMO

你应该尝试这样的事情:

  function update(){ i++; document.getElementById('tekst').innerHTML = i; setInterval(update(),1000); } 

这意味着你必须创build一个你需要做的事情的函数,并确保它会以你喜欢的时间间隔自我调用。 在你的身上onload第一次调用这个函数是这样的:

 <body onload="update()">