暂停JavaScript的分裂时刻

时间:2011-05-19 18:40:01

标签: javascript

我有以下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 !!!!”标记了代码,我需要一些方法暂停执行一瞬间。这段代码一旦完成,就会出现短路灯(视频游戏中的灯光)。我想知道如何暂停代码,因为似乎没有自然的方法。

4 个答案:

答案 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建议的那样破解它,但你不应该这样做。