Javascript 如何在具有不同超时长度的循环中使用setTimeout? var playlist=[ ['Message 1','1000'], ['Message 2','6000'], ['Message 3','1000'], ['Message 4','8000'] ]; 对于(i=0;i
”+playlist[x][0]+”超时:“+playlist[x][1]+””; }}(i),播放列表[i][1]*i) } 我试图创建一个计时器,其中每个setTimeout间隔的长度根据存储在数组中的变量而变化。例如,我希望“Message 1”显示1秒,然后“Message 2”显示6秒,依此类推 但是,消息以意外的顺序出现,并且它们在屏幕上的时间段似乎与我在数组中指定的相应延迟无关 理想情况下,我还希望该进程在到达数组的末尾时循环回数组的开头Javascript 如何在具有不同超时长度的循环中使用setTimeout? var playlist=[ ['Message 1','1000'], ['Message 2','6000'], ['Message 3','1000'], ['Message 4','8000'] ]; 对于(i=0;i,javascript,settimeout,Javascript,Settimeout,”+playlist[x][0]+”超时:“+playlist[x][1]+””; }}(i),播放列表[i][1]*i) } 我试图创建一个计时器,其中每个setTimeout间隔的长度根据存储在数组中的变量而变化。例如,我希望“Message 1”显示1秒,然后“Message 2”显示6秒,依此类推 但是,消息以意外的顺序出现,并且它们在屏幕上的时间段似乎与我在数组中指定的相应延迟无关 理想情况下,我还希望该进程在到达数组的末尾时循环回数组的开头 任何帮助都将不胜感激 编辑:带循
任何帮助都将不胜感激 编辑:带循环条件:
var playlist = [
['Message 1','1000'],
['Message 2','6000'],
['Message 3','1000'],
['Message 4','8000']
];
for (i = 0; i < playlist.length; i++) {
setTimeout((function(x) { return function() {
$("content").empty().append("<p>" + playlist[x][0] + " timeout: " + playlist[x][1] + "</p>");
}; })(i), playlist[i][1]*i)
}
然后,要停止循环,可以调用:
var timer = null;
var index = -1;
var playlist = [
{ message: "Message 1", duration: 1000 },
{ message: "Message 2", duration: 6000 },
{ message: "Message 3", duration: 1000 },
{ message: "Message 4", duration: 8000 }
];
function displayNextMessage() {
// If the next message exists...
if (playlist[++index]) {
// ...do something with the message here...
console.log(playlist[index].message);
// ...and queue the next message.
timer = setTimeout(function () {
displayNextMessage();
}, playlist[index].duration);
}
// Otherwise, loop back to the beginning.
else {
index = -1;
displayNextMessage();
}
}
displayNextMessage();
当当前超时过期时,您需要设置下一个超时,而不是在这样的循环中array@Will:我已更新我的答案,以包括循环条件和“停止”机制。
clearTimeout(timer);