jQuery setTimeOut:在for循环中

时间:2015-04-08 14:28:30

标签: javascript jquery performance for-loop settimeout

我在使用setTimeOut函数时遇到了一些麻烦。虽然我看到了有关此功能的其他主题,但我仍然没有得到它。

我想产生5个“兽人”,但不是同时产生。所以我想给每个人延迟5秒钟。我创造的最好的东西是无限循环,但我不知道为什么它在4之后没有停止。

for (var z = 0; z < 4; z++) {
    (function (z) {
        setTimeout(function () {
            $("#gameBoard").append("<img class='Orc' src='Img/Orc.gif' alt='Orc'/>");
            $( ".Orc" ).animate({ "left": "+=100%" }, 20000 );
            console.log("test");
        }, 4000);
    }(z))
}

这只会产生一个兽人。为什么会这样?

它不必与传递的变量一起使用。

有什么想法吗?

5 个答案:

答案 0 :(得分:3)

如果您希望每个 orc的延迟与不同,则必须为每个orc传递setTimeout不同的延迟:

for (var z = 0; z < 4; z++) {
    (function (z) {
        setTimeout(function () {
            $("#gameBoard").append("<img class='Orc' src='Img/Orc.gif' alt='Orc'/>");
            $( ".Orc" ).animate({ "left": "+=100%" }, 20000 );
            console.log("test");
        }, 4000 * z);
    }(z))
}

请注意,我将延迟乘以z

答案 1 :(得分:1)

你可以尝试这样的事情:

var orcsSent = 0;

function sendOrc() {
    $("#gameBoard").append("<img class='Orc' src='Img/Orc.gif' alt='Orc'/>");
    $( ".Orc" ).animate({ "left": "+=100%" }, 20000 );
    console.log("test");

    if(orcsSent < 5) {
        orcsSent++;
        setTimeout(function () {
             sendOrc();
        }, 4000);
    }
}

sendOrc();

答案 2 :(得分:0)

使用if然后再次调用该函数。

例如

var step = 0
function SpawnOrcs(){
    [code for orc spawn]
    if (step <4)
    {
        step++
        setTimeout(SpawnOrcs,[time to wait in ms])
    }
}

答案 3 :(得分:0)

为了更清晰地实现@ lpg&#39答案:

function sendOrcs(n) {
    (function loop() {
        if (--n < 0) return;
        $("#gameBoard").append("<img class='Orc' src='Img/Orc.gif' alt='Orc'/>");
        $( ".Orc" ).animate({ "left": "+=100%" }, 20000 );
        setTimeout(loop, 4000);
    })();
}

注意:这将立即产生第一个兽人,而不是4秒后。

答案 4 :(得分:0)

你需要的是兽人的名字!

试试这个:

function spawnOrcs(numberOfOrcs) {

    var interval = 2000;
    var orcNames = ["Graklak Glasha", "Ougigoth Batul", "Zoughat Ushug", "Graman Lash", "Grushnag Sharn", "Urgan Bumph", "Raghat Durgat", "Xujarek Uloth", "Wumkbanok Bor", "Gnarlug Umog"];

    for (var i = 0; i < numberOfOrcs; i++) {
        var name = orcNames[i % orcNames.length];
        (function(i, name) {
            setTimeout(function() {
                console.log("Spawned Orc:", name);
            }, interval * (i + 1))
        })(i, name);
    }

}

spawnOrcs(5);

我在这里耐心地等待你想到将此标记为有史以来最好的答案! :d