タイマー処理
setTimeout setInterval requestAnimationFrame
遅延実行・繰り返し処理・アニメーションループなどタイマー関連APIをまとめます。
デモ:setTimeout(遅延実行)
デモ:setInterval(繰り返し実行)
0
デモ:requestAnimationFrame(高精度ストップウォッチ)
00:00.00
コード例
js
// setTimeout:一定時間後に1回実行
const id = setTimeout(() => {
console.log('3秒後に実行');
}, 3000);
// キャンセル
clearTimeout(id);
// setInterval:一定間隔で繰り返し実行
const id2 = setInterval(() => {
counter++;
if (counter >= 10) clearInterval(id2); // 10回で停止
}, 1000);
clearInterval(id2); // 任意のタイミングで停止
// requestAnimationFrame:ディスプレイの更新に同期(~60fps)
let startTime;
function animate(timestamp) {
if (!startTime) startTime = timestamp;
const elapsed = timestamp - startTime;
el.style.transform = `translateX(${elapsed * 0.1}px)`;
if (elapsed < 2000) {
requestAnimationFrame(animate); // 次フレームをリクエスト
}
}
const rafId = requestAnimationFrame(animate);
cancelAnimationFrame(rafId); // キャンセル比較:setTimeout vs setInterval vs requestAnimationFrame
| API | 精度 | 非表示時 | 用途 |
|---|---|---|---|
| setTimeout | △ 最低4ms | 遅延が増える | 遅延実行、デバウンス |
| setInterval | △ ドリフトあり | 遅延が累積 | 定期ポーリング、カウンター |
| requestAnimationFrame | ✅ 最高(~16ms) | ✅ 自動停止 | アニメーション、描画ループ |
NEWscheduler.postTask()(タスク優先度制御)
タスクの優先度(user-blocking / user-visible / background)を指定してスケジューリングできるAPIです。メインスレッドのブロッキングを防ぎます。
js
// 優先度: "user-blocking" > "user-visible" > "background"
await scheduler.postTask(() => {
// 重い処理
processLargeData();
}, { priority: 'background' }); // バックグラウンドで実行
// キャンセル可能なタスク
const controller = new TaskController({ priority: 'user-visible' });
scheduler.postTask(task, { signal: controller.signal });
controller.abort(); // キャンセル
// ブラウザ対応: Chrome 94+, Edge 94+🤖 AIプロンプトテンプレート
以下のようなsetTimeout / setInterval / clearTimeoutを使ったタイマー処理のサンプルコードを生成してください: - setTimeoutで指定ミリ秒後に一度だけ処理を実行し、clearTimeoutでキャンセルする方法 - setIntervalで1秒ごとにカウントアップし、clearIntervalで停止する実装 - requestAnimationFrameを使ったスムーズなアニメーションループの実装 - 自己呼び出しsetTimeoutでsetIntervalのドリフト問題を回避するパターン - scheduler.postTask()を使った優先度付きタスクスケジューリングの実装例
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。