JS Image Slider For Loop在第二次迭代时未迭代

时间:2020-07-31 23:22:51

标签: javascript arrays for-loop

伙计们,最近几天我一直在努力解决这个问题。我真的需要您的帮助,我想了解发生了什么。我的函数将迭代一次,然后返回第一个值,如何使它从零开始循环并继续循环。我已经尝试了while循环,但是尝试失败了。谢谢你们!

function run() {
    for (let i = 0; i <= imgArray.length; i++) {
        (function (e) {
            setTimeout(function () {
                if (i == imgArray.length) {
                    i = 0;
                }
                imgContainer.style.background = imgArray[i];

            }, 3000 * e);

        })(i);
    };
}

1 个答案:

答案 0 :(得分:2)

您可能想要的是setInterval。与setTimeout仅执行一次不同,setInterval在每个时间间隔(例如,每1秒)执行一次,直到您调用clearInterval()

使用此逻辑和一些模(%)逻辑,我们可以做到:

var currentImage = 0;

//this will call `changeBackground` every 1 second
setInterval(changeBackground, 1000); //1000 ms = 1 sec

function changeBackground() {
    currentImage = (currentImage + 1) % imgArray.length;
    imgContainer.style.background = imgArray[currentImage];
}

模部分的解释:

%或模为imgArray.length除以currentImage + 1的欧几里得除数的余数,它将始终是0到imgArray.length - 1之间的值。每当currentImage + 1等于imgArray.length时,currentImage都会重置为零。

相关问题