javascript - 如何使用 setTimeout 或 setInterval 减慢循环

标签 javascript jquery foreach settimeout setinterval

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

我想遍历数组,并且我想为每个项目触发一个点击事件。我有一些这样的工作,除了一切都立即触发。我如何强制循环等待几秒钟,然后再继续循环。

这是我的。

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。

最佳答案

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

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"]);

演示: http://jsfiddle.net/BxDtp/4/

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

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

关于javascript - 如何使用 setTimeout 或 setInterval 减慢循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16672561/

相关文章:

javascript - allMarkdownRemark 不返回任何结果

javascript - 如何从父窗口在子窗口中动态创建元素

php - 进度条百分比无法正常工作(我有兴趣了解代码形式)

jquery - 我的 animate() 函数不起作用

c# - OfType ForEach 排除特定元素

javascript - 如何在表单中提交禁用输入元素?

javascript - 性能问题-css vs javascript vs jquery

PHP foreach 获取所有值的最后日期

JavaScript localStorage - 来自多个用户卡的文本输入

javascript - ES6 模板字面量到 "decompiled"数组表示