JavaScript 時間になったら表示: タイマー処理を使いこなす完全ガイド
JavaScriptで時間になったら特定の処理を実行したいと思ったことはありませんか?この記事では、 setTimeout、setInterval、requestAnimationFrameといったタイマー処理の方法を、初心者にも分かりやすく、豊富なコード例とともに解説します。基本的な使い方から、アニメーションの実装、パフォーマンスの最適化まで、網羅的に学んでいきましょう!
JavaScriptタイマー処理の基本
-
setTimeout
指定時間後に一度だけ処理を実行する方法。
構文と使い方
setTimeout(function, milliseconds, arg1, arg2, ...);
function
: 実行する関数milliseconds
: 遅延時間(ミリ秒単位)arg1, arg2, ...
: 関数に渡す引数(オプション)
実例:指定時間後にアラートを表示
setTimeout(() => { alert("3秒経ちました!"); }, 3000);
setTimeoutのキャンセル方法 (clearTimeout)
let timerId = setTimeout(() => { // ...処理... }, 5000); clearTimeout(timerId); // タイマーをキャンセル
-
setInterval
指定時間ごとに繰り返し処理を実行する方法。
構文と使い方
setInterval(function, milliseconds, arg1, arg2, ...);
function
: 実行する関数milliseconds
: 間隔時間(ミリ秒単位)arg1, arg2, ...
: 関数に渡す引数(オプション)
実例:カウントダウンタイマーの作成
let count = 10; let timerId = setInterval(() => { console.log(count); count--; if (count < 0) { clearInterval(timerId); console.log("時間切れ!"); } }, 1000);
setIntervalのキャンセル方法 (clearInterval)
clearInterval(timerId);
実践!アニメーションで理解を深める
-
requestAnimationFrame
ブラウザの描画タイミングと同期した滑らかなアニメーションを実現する方法。
setTimeout/setIntervalとの違い
setTimeout
やsetInterval
は、ブラウザの描画タイミングとは独立して動作するため、アニメーションがぎこちなくなる可能性があります。一方、requestAnimationFrame
はブラウザの描画タイミングと同期して処理を実行するため、より滑らかなアニメーションを実現できます。基本的な使い方
function animate() { // ...アニメーション処理... requestAnimationFrame(animate); // 次のフレームを要求 } requestAnimationFrame(animate); // アニメーション開始
実例:要素を滑らかに移動させるアニメーション
let element = document.getElementById("myElement"); let position = 0; function animate() { position += 5; element.style.left = position + "px"; if (position < 200) { requestAnimationFrame(animate); } } requestAnimationFrame(animate);
アニメーションの停止方法 (cancelAnimationFrame)
let animationId = requestAnimationFrame(animate); cancelAnimationFrame(animationId);
パフォーマンスと精度を向上させるテクニック
-
タイマー処理の注意点
タイマー処理は正確な時間管理には不向きです。
時間のずれが発生する原因
- JavaScriptエンジンはシングルスレッドで動作するため、他の処理が実行中だとタイマー処理が遅延する可能性があります。
- ブラウザのタブが非アクティブ状態になると、タイマー処理の精度が低下することがあります。
正確な時間計測にはDateオブジェクトの活用を推奨
正確な時間計測が必要な場合は、
Date
オブジェクトを利用して経過時間を計算する方法が推奨されます。 -
パフォーマンス最適化
無駄な処理を減らし、スムーズな動作を実現します。
-
メモリリークを防ぐためのclearTimeout/clearIntervalの活用
不要になったタイマーは、
clearTimeout
やclearInterval
を使用して必ずキャンセルしましょう。キャンセルを怠ると、メモリリークが発生する可能性があります。 -
requestAnimationFrameによる描画負荷の軽減
アニメーションを実装する際は、
requestAnimationFrame
を使用することで、ブラウザの描画タイミングと同期した処理が可能となり、描画負荷を軽減できます。 -
高負荷な処理の分割実行
タイマー処理内で高負荷な処理を行う場合は、処理を分割して複数回に分けて実行することで、ブラウザの動作がブロックされることを防ぎ、スムーズな動作を実現できます。
-
まとめ
この記事では、JavaScriptで時間になったら処理を実行するためのタイマー処理について、基本から応用、パフォーマンスの最適化まで解説しました。これらの知識を活かして、より表現力豊かなWebアプリケーションを開発しましょう。
参考資料
- Window.setTimeout - Web API | MDN
- Window.setInterval - Web API | MDN
- window.requestAnimationFrame - Web API | MDN
よくある質問
- Q1: setTimeoutとsetIntervalの違いは何ですか?
- A1:
setTimeout
は指定時間後に一度だけ処理を実行しますが、setInterval
は指定時間ごとに繰り返し処理を実行します。 - Q2: requestAnimationFrameはどのような場合に使うべきですか?
- A2: ブラウザの描画タイミングと同期した滑らかなアニメーションを実装したい場合に、
requestAnimationFrame
を使用します。 - Q3: タイマー処理で正確な時間管理はできますか?
- A3: JavaScriptのタイマー処理は正確な時間管理には不向きです。正確な時間計測が必要な場合は、
Date
オブジェクトを利用して経過時間を計算する方法が推奨されます。
その他の参考記事:jquery 時間 指定