web-dev-qa-db-ja.com

javascriptタイマーループ

特定のポイントに達すると、タイマーがリセットされ、最初からやり直すタイマーを作成したい。

今、ループを設定しました。テストとして、5000ミリ秒(5秒)後にリセットするようにします。しかし、カウンターはすべてがっかりしています。

ここでWIPデモ: http://jsfiddle.net/stursby/wUHA3/

24
stursby

SetTimeoutの代わりに、setIntervalの使用を検討してください。間隔を空けるまで自動的に繰り返されます。

setInterval(myMethod, 5000);

function myMethod( )
{
  //this will repeat every 5 seconds
  //you can reset counter here
}
58
keyboardP

おそらくsetIntervalの代わりにsetTimeoutを使用する必要があることにkeyboardPに同意します。ただし、元の質問に答えるために、タイマーに問題がある理由は、繰り返しロジックのためです。使用しないでください:

var diff = (new Date().getTime() - start) - time;
window.setTimeout(instance, (100 - diff));

実行時間を考慮する必要はありません(diffで実行しようとしていたことだと思います)。無視できると仮定して使用してください:

setTimeout(instance, 100);

this jsFiddle でわかるように、問題は解決されています。

5
Chad