setInterval() / clearInterval()
| 対応: | ES1(ECMAScript 1997) |
|---|
指定した時間間隔で処理を繰り返し実行します。『clearInterval()』で繰り返しを停止できます。
構文
// 一定間隔で関数を繰り返し実行します。 var timerID = setInterval(関数, ミリ秒); // 繰り返しを停止します。 clearInterval(timerID);
引数
| 引数 | 概要 |
|---|---|
| 関数 | 繰り返し実行されるコールバック関数を指定します。 |
| ミリ秒 | 実行間隔をミリ秒で指定します。1000ミリ秒が1秒です。 |
戻り値
タイマーを識別するための数値IDを返します。このIDを『clearInterval()』に渡すことで、繰り返しを停止できます。
サンプルコード
sample_setInterval.html
<p id="counter">0</p> <button id="startBtn">スタート</button> <button id="stopBtn">ストップ</button> <p id="output"></p>
sample_setInterval.js
// パターン1: ボタンで開始・停止できるカウンター
var counter = document.getElementById("counter");
var startBtn = document.getElementById("startBtn");
var stopBtn = document.getElementById("stopBtn");
var output = document.getElementById("output");
var timerID = null;
startBtn.addEventListener("click", function() {
if (timerID !== null) { return; } // すでに動いている場合は何もしません。
timerID = setInterval(function() {
counter.textContent = Number(counter.textContent) + 1;
}, 1000);
output.textContent = "カウント中...";
});
stopBtn.addEventListener("click", function() {
clearInterval(timerID); // タイマーを停止します。
timerID = null;
output.textContent = "停止しました";
});
sample_setInterval.js
// パターン2: 条件付きで自動停止するカウントアップ
var count = 0;
var id = setInterval(function() {
count++;
console.log("カウント: " + count);
if (count >= 5) {
clearInterval(id); // 5回目で停止します。
console.log("タイマーを停止しました");
}
}, 1000);
カウント: 1 カウント: 2 カウント: 3 カウント: 4 カウント: 5 タイマーを停止しました
sample_setInterval.js
// パターン3: requestAnimationFrame()を使ったスムーズなアニメーション
var position = 0;
var box = document.getElementById("box");
function animate() {
position += 2;
box.style.left = position + "px"; // 2pxずつ右に移動します。
if (position < 300) {
requestAnimationFrame(animate); // 次のフレームで再度実行されます。
}
}
requestAnimationFrame(animate);
setInterval()とrequestAnimationFrame()の違い
| メソッド | 概要 |
|---|---|
| setInterval() | 指定した時間間隔で処理を繰り返します。カウントダウンや定期的なデータ取得など、一定間隔の処理に適しています。 |
| requestAnimationFrame() | ブラウザの画面描画に合わせて処理を実行します。通常は1秒間に60回呼び出されるため、滑らかなアニメーションに最適です。タブが非表示の場合は自動的に停止し、パフォーマンスに優れています。 |
概要
『setInterval()』は指定したミリ秒ごとに関数を繰り返し実行するタイマー関数です。カウントダウンタイマーや、定期的なデータ更新、スライドショーの自動切り替えなどによく使われます。
『clearInterval()』を呼ばない限り処理は永久に繰り返されるため、必ず停止条件を設けてください。ページを離れても内部でタイマーが動き続け、メモリリークの原因になることがあります。
アニメーション用途の場合は『setInterval()』よりも『requestAnimationFrame()』の使用をおすすめします。『requestAnimationFrame()』はブラウザの画面描画タイミングに同期するため、60fpsの滑らかなアニメーションが実現でき、タブが非表示の場合は自動的に処理を停止してくれます。1回だけ遅延実行したい場合は『setTimeout()』を使用してください。
対応ブラウザ
デスクトップ
3 以前 ×
3 以前 ×モバイル
Android Browser
37 以降 ○
4 以前 ×
Chrome Android
36 以降 ○
17 以前 ×
Firefox Android
79 以降 ○
3 以前 ×記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。