言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

JavaScript辞典

  1. トップページ
  2. JavaScript辞典
  3. setInterval() / clearInterval()

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()』を使用してください。

対応ブラウザ

Chrome Chrome
49 以降
Firefox Firefox
57 以降
Safari Safari
18 以降
Edge Edge
80 以降
11 以前 ×
IE IE
11 以降
3 以前 ×
Opera Opera
48 以降
3 以前 ×
iOS Safari iOS Safari
18 以降
Android Browser Android Browser
37 以降
4 以前 ×
Chrome Android Chrome Android
36 以降
17 以前 ×
Firefox Android Firefox Android
79 以降
3 以前 ×

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。