ページごとに実行したい場合は、ほぼ完了です。setInterval
現在、コードは毎秒実行されるため、ミリ秒を追跡することはできません。代わりに私がお勧めするのは次のようなものです:
(function() {
var counter = 0,
cDisplay = document.getElementById("counter");
format = function(t) {
var minutes = Math.floor(t/600),
seconds = Math.floor( (t/10) % 60);
minutes = (minutes < 10) ? "0" + minutes.toString() : minutes.toString();
seconds = (seconds < 10) ? "0" + seconds.toString() : seconds.toString();
cDisplay.innerHTML = minutes + ":" + seconds + "." + Math.floor(t % 10);
};
setInterval(function() {
counter++;
format(counter);
},100);
})();
これにより、コードを 1 秒あたり 10 回実行できるようにするために、いくつかのことが行われます。
- 出力要素
#counter
はキャッシュされ、反復ごとに取得されるわけではありません
- 書式設定は算術演算 (モジュロと除算) のみに保持されます。
これにより、先行ゼロも追加されます。
このカウンターをページごとに実行し続けたい場合は、document.cookies
ページからページへ最終的な値を渡すために使用することを検討してください。
フィドル
これは、優れた最初のバージョンとして機能します。ただし、次のことが必要な場合があります。
- タイマーを一時停止/再開する
- タイマーをリセットする
- 複数のタイマーを持つ
このため、上記のコードに少し複雑な形式を追加して、複数のタイマーを管理できるようにします。これは、いくつかのオブジェクト指向の概念を利用します。オブジェクトを使用しTimerManager
てタイマーを「ホスト」し、各Timer
オブジェクトにはマネージャーへのリンクがあります。
この理由は、複数の呼び出しsetInterval()
を行うのではなく、このようにすることですべてのタイマーが同じものに依存するためです。setInterval()
これにより、無駄なクロック サイクルを削減できます。
これについては、約 5 分で詳しく説明します。