-5

フォーラムへの投稿を待つ方法として、ちょっとしたタイム キラー プロジェクトを作成しています。

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);
}

それが私のコードです。これまでのところ、配列から 1 つのアイテムのみが表示され、そこで停止します。

私がやりたいことは、factsArray から 3 秒ごとに 1 つのファクトを表示し、60 秒が経過すると、「60 秒が経過しました! Go and post!」と表示されます。

コードが 3 秒ごとに 1 つではなく、1 つのファクトのみを表示するのはなぜですか?

4

1 に答える 1

0

setTimeoutこのコードはほぼ同時に 20 のタイムアウトを追加するため、タイムアウトも同時に終了します。タイムアウトを 1 つだけ設定し、合計タイムアウトにまだ達していない場合は、タイムアウトのコールバックで次のタイムアウトを開始する必要があります。同様に、合計タイムアウトに達した場合は、最後のステートメントを追加する必要があります。

setIntervalこれを使用しclearIntervalて実装することもできます。

于 2013-08-27T14:57:00.790 に答える