在 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));
}

我用短语"!!!这里的这一行!!!",我需要某种方式来暂停执行一瞬间。 完成此代码后,将出现短路灯(视频游戏中的灯)。 我想知道我将如何暂停代码,因为似乎没有自然的方法。

我认为更好的方法是使用 setInterval 消除 for 循环。 然后,您可以在Math.floor(Math.random()*10)次迭代后清除间隔。 我不建议通过循环旋转来阻止执行。 当您这样做时,大多数浏览器都会吓坏了。

通常,

这是通过调用 setTimeout 在 JavaScript 中处理的,将延迟后要执行的代码传递给它。或者换句话说,不是在函数中暂停,而是将函数一分为二:一部分在延迟之前执行,下一部分在延迟之后执行。

你已经通过 setTimeout 递归调用你的函数,所以你几乎就在那里了。看看你是否可以重组你的代码,以便你摆脱 for 循环,而是传入最大迭代次数。减少每次调用时的计数器。如果在递减后,计数器大于零,请调用 setTimeout 再次调用该函数。

function pause(ms) 
{
    var d = new Date();
    var c = null;
    do
    {
        c= new Date();
    } 
    while(c - d < ms);
}

使用 pause(1000); 暂停 1 秒钟。

由本网站提供。

浏览器中的

Javascript没有同步暂停的能力。你可以按照muntoo的建议绕过它,但你不应该这样做。

最新更新