我正在为自己制作一个时间杀手项目,作为等待论坛帖子的一种方式。
var factsArray = ['MIT has created a 3D version of Scratch, called StarLogo', 'Duck echos DO quack', 'Ostriches never stick their head in the sand', 'The cigarrete lighter was invented before the match']
var i = 0;
function start() {
while (i < 20) {
setTimeout(function(){document.getElementById('content').innerHTML = factsArray[Math.floor(Math.random() * factsArray.length)];}, 3000);
i = i + 1;
}
setTimeout(function(){document.getElementById('content').innerHTML = "Sixty seconds are up! Go and post!";}, 3000);
}
这是我的代码;到目前为止,它只会显示数组中的一个项目并停在那里。
我想要它做的是从我的factArray每3秒显示一个事实,直到60秒过去,然后它会显示“60秒已经完成!去发布!”。
为什么我的代码只显示一个事实,而不是每3秒显示一次?
答案 0 :(得分:0)
setTimeout
是准异步的,此代码几乎同时增加了20个超时,因此它们也同时结束。如果尚未达到总超时,您将只想设置一个超时并在超时的回调中启动下一个超时。如果已经达到总超时,则应该添加最后一个语句。
您也可以使用setInterval
和clearInterval
来实现此目的。