在循环中使用 setTimeout
Using setTimeout in a Loop
function showColors() {
$.each(colorList, function(value) {
setTimeout(function(){
revealColor(colorList[value]);
}, 1000);
});
}
我主要是尝试在此处进行设置,以便 revealColor 函数每 1000 毫秒运行一次,直到我到达整个 colorList 数组的末尾。不幸的是,它立即将所有 setTimeout 事件排队,然后 1000 毫秒后,revealColor 函数对数组中的每个值运行一次。
我确信有一种我只是没有看到的更简单的方法。任何帮助都会很棒!
使用纯 JS:
var colorList = ["red", "green", "blue"];
var colorIndex = 0;
var handler = setInterval(function() {
revealColor(colorList[colorIndex]);
colorIndex++;
if (colorIndex >= colorList.length) {
clearInterval(handler);
}
}, 1000);
function revealColor(color) {
document.body.style.background = color;
}
使用jQuery:
var colorList = ["red", "green", "blue"];
var delay = 1000;
$.each(colorList, function (value) {
setTimeout(function () {
revealColor(colorList[value]);
}, delay);
delay += 1000;
});
function revealColor(color) {
document.body.style.background = color;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
function showColors() {
$.each(colorList, function(value) {
setTimeout(function(){
revealColor(colorList[value]);
}, 1000);
});
}
我主要是尝试在此处进行设置,以便 revealColor 函数每 1000 毫秒运行一次,直到我到达整个 colorList 数组的末尾。不幸的是,它立即将所有 setTimeout 事件排队,然后 1000 毫秒后,revealColor 函数对数组中的每个值运行一次。
我确信有一种我只是没有看到的更简单的方法。任何帮助都会很棒!
使用纯 JS:
var colorList = ["red", "green", "blue"];
var colorIndex = 0;
var handler = setInterval(function() {
revealColor(colorList[colorIndex]);
colorIndex++;
if (colorIndex >= colorList.length) {
clearInterval(handler);
}
}, 1000);
function revealColor(color) {
document.body.style.background = color;
}
使用jQuery:
var colorList = ["red", "green", "blue"];
var delay = 1000;
$.each(colorList, function (value) {
setTimeout(function () {
revealColor(colorList[value]);
}, delay);
delay += 1000;
});
function revealColor(color) {
document.body.style.background = color;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>