JavaScript中的循环定时器
我需要执行一段JavaScript代码,每个2000毫秒。
setTimeout('moveItem()',2000)
上述将在2000毫秒后执行一个函数,但不会再执行一次。
所以在我的moveItem函数中我有:
function moveItem() { jQuery(".stripTransmitter ul li a").trigger('click'); setInterval('moverItem()',2000); }
这是行不通的,因为我想执行触发器,单击jQuery每段2000毫秒的代码片段,但是现在它一直被调用,脚本需要被中断。 此外,我觉得这是非常糟糕的质量编码…你们如何解决这个问题?
请注意, setTimeout
和setInterval
是非常不同的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传递给setTimeout
或setInterval
– 最佳做法是传递匿名函数或函数标识符(如上所述)。 此外,请小心不要混用单引号和双引号。 挑一个,坚持下去。
我相信你正在寻找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()">