each()迭代与触发器结合

时间:2015-10-22 08:30:17

标签: javascript jquery triggers each

我有这段代码:

function gamePlay(array){
    $.each(array, function(index, value){
        $("." + sounds[value]).trigger("play");
    });
}

该函数获取一个包含值(类名)的数组。我想在数组的每次迭代中播放声音。但是,相反,我会立即播放所有声音。我尝试过使用setTimeout,但它又做了同样的事情。我需要一些能够停止/暂停迭代的东西,直到触发声音完成。

2 个答案:

答案 0 :(得分:0)

您可以像这样设置超时功能。假设所有声道具有相同的持续时间。

function gamePlay(array){

    var duration = 1000;  //1000ms

    $.each(array, function(index, value){
        (function(value, index){

           setTimeout(function(){

              $("." + sounds[value]).trigger("play");

            }, index * duration);

        })(value, index);      
    }
}

答案 1 :(得分:0)

尝试这样的事情: -

function gamePlay(array){
    playSound(array, 0);
}

function playSound(array, index){
    if((index+1) < array.length){
        $("." + sounds[array[index]]).on('ended', function() { 
            playSound(array, ++index);
        });
    }
    $("." + sounds[array[index]]).trigger("play");
}

这是未经测试的,但会介绍如何在上一个完成后触发下一个声音。