JavaScript代码有什么问题?

时间:2013-08-26 19:46:30

标签: javascript html

我正在为自己制作一个时间杀手项目,作为等待论坛帖子的一种方式。

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秒显示一次?

1 个答案:

答案 0 :(得分:0)

setTimeout是准异步的,此代码几乎同时增加了20个超时,因此它们也同时结束。如果尚未达到总超时,您将只想设置一个超时并在超时的回调中启动下一个超时。如果已经达到总超时,则应该添加最后一个语句。

您也可以使用setIntervalclearInterval来实现此目的。