我有以下JavaScript代码:
var cILo=true;
var img1="images/title-2a.png";
var img2="images/title-2b.png";
function loadblinker() {
for (var i=0,l=Math.floor(Math.random()*10);i<l;++i) {
cILo=!cILo;
if (cILo) {
document.getElementById("lamp").src=img1;
} else {
document.getElementById("lamp").src=img2;
}
!!!! THIS LINE HERE !!!!
}
document.getElementById("lamp").src=img1;
setTimeout("loadblinker()",Math.floor(Math.random()*10000));
}
我已经使用短语“!!!! THIS LINE HERE !!!!”标记了代码,我需要一些方法暂停执行一瞬间。这段代码一旦完成,就会出现短路灯(视频游戏中的灯光)。我想知道如何暂停代码,因为似乎没有自然的方法。
答案 0 :(得分:2)
我认为更好的方法是使用setInterval
消除for循环。然后,您可以在Math.floor(Math.random()*10)
次迭代后清除间隔。我不建议通过循环旋转来阻止执行。当你这样做时,大多数浏览器会吓坏你。
答案 1 :(得分:2)
通常,这是通过调用setTimeout在JavaScript中处理,并在延迟之后传递要执行的代码。或者换句话说,不是在函数内暂停,而是将函数分解为两个:一个部分在延迟之前执行,另一个部分在执行之后执行。
您已经通过setTimeout以递归方式调用函数,因此您几乎就在那里。看看你是否可以重构代码,以便摆脱for循环,而不是传递最大迭代次数。减少每个电话的计数器。如果在递减之后,您的计数器大于零,则调用setTimeout再次调用该函数。
答案 2 :(得分:1)
function pause(ms)
{
var d = new Date();
var c = null;
do
{
c= new Date();
}
while(c - d < ms);
}
使用pause(1000);
暂停1秒钟。
由this website提供。
答案 3 :(得分:1)
浏览器中的Javascript无法执行同步暂停。你可以像muntoo建议的那样破解它,但你不应该这样做。