如何使用setTimeout或setInterval减慢循环速度

时间:2013-05-21 14:29:06

标签: javascript jquery foreach settimeout setinterval

我有一个名为RotatorNames的数组。它包含随机内容,但我们只是说它包含["rotatorA","rotatorB","rotatorC"]

我想循环遍历数组,并且对于每个要触发click事件的项目。我有一些工作,除了一切都立即触发。如何强制循环在继续循环之前等待几秒钟。

这就是我所拥有的。

function Rotator() {
    var RotatorNames = ["rotatorA","rotatorB","rotatorC"];
    RotatorNames.forEach(function(entry){
        window.setTimeout(function() {
            //Trigger that elements button.
            var elemntBtn = $('#btn_' + entry);
            elemntBtn.trigger('click');
        }, 5000);
    });
}

你可以运行它来查看我的问题。 http://jsfiddle.net/BxDtp/ 此外,有时警报会执行A,C,B而不是A,B,C。

4 个答案:

答案 0 :(得分:5)

虽然我确定其他答案有效,但我更喜欢使用此设置:

function rotator(arr) {
    var iterator = function (index) {
        if (index >= arr.length) {
            index = 0;
        }
        console.log(arr[index]);
        setTimeout(function () {
            iterator(++index);
        }, 1500);
    };

    iterator(0);
};

rotator(["rotatorA", "rotatorB", "rotatorC"]);

DEMO: http://jsfiddle.net/BxDtp/4/

通过将“正确”值传递给setTimeout来尝试使迭代正确排列,这对我来说似乎更合乎逻辑。

这允许按顺序连续迭代数组。如果您希望在完成一次后停止,请将index = 0;更改为return;

答案 1 :(得分:3)

您可以根据当前索引增加超时时间:

RotatorNames.forEach(function(entry, i) {
    window.setTimeout(function() {
        //Trigger that elements button.
        var elemntBtn = $('#btn_' + entry);
        elemntBtn.trigger('click');
    }, 5000 + (i * 1000)); // wait for 5 seconds + 1 more per element
});

答案 2 :(得分:0)

这样的事情应该做你以后的事情:

function Rotator(index){
  var RotatorNames = ["rotatorA","rotatorB","rotatorC"];
  index = (index === undefined ? 0 : index);

  var $btn = $("#btn_"+RotatorNames[index]);
  $btn.click();

  if(RotatorNames[index+1]!==undefined){
    window.setTimeout(function(){
      Rotator(index+1);
    }, 500);
  }
}

答案 3 :(得分:0)

尝试:

var idx = 0;
function Rotator() {
    var RotatorNames = ["rotatorA", "rotatorB", "rotatorC"];
        setTimeout(function () {
            console.log(RotatorNames[idx]);
            idx = (idx<RotatorNames.length-1) ? idx+1:idx=0;
            Rotator();
        }, 5000);
}
Rotator();

<强> jsFiddle example

(请注意,我使用console.log代替alert