【初心者向け】JavaScriptで5秒待ってから次の処理を実行する方法を徹底解説!
JavaScript で DOM イベント完了まで待機する方法
イベントリスナーは、特定のイベントが発生したときに実行される関数を定義するものです。DOM イベント完了を待機するには、以下の手順でイベントリスナーを使用します。
- 待機したいイベントの種類を決定します。(例:
click
,load
,DOMContentLoaded
) - イベントリスナー関数を定義します。この関数内では、DOM イベント完了後に実行したい処理を記述します。
- イベントリスナーをイベント発生元の要素に登録します。
例:
// ボタン要素の click イベントを待機
const button = document.getElementById('myButton');
button.addEventListener('click', function() {
// ボタンがクリックされた後に実行したい処理
console.log('ボタンがクリックされました!');
});
Promise は、非同期処理の結果を扱うための JavaScript オブジェクトです。DOM イベント完了を待機するには、以下の手順で Promise を使用します。
- 待機したいイベントの種類に対応する Promise を作成します。(例:
addEventListener
の返り値) then
メソッドを使用して、Promise が解決されたときに実行する関数を定義します。この関数内では、DOM イベント完了後に実行したい処理を記述します。
// ボタン要素の click イベントを待機
const button = document.getElementById('myButton');
const clickPromise = button.addEventListener('click');
clickPromise.then(function() {
// ボタンがクリックされた後に実行したい処理
console.log('ボタンがクリックされました!');
});
setTimeout()
関数は、指定された時間後に関数を一度だけ実行します。DOM イベント完了を待機するには、以下の手順で setTimeout()
を使用します。
- 待機時間をミリ秒単位で指定します。
// 5 秒後に実行する関数
function executeAfter5Seconds() {
// DOM イベント完了後に実行したい処理
console.log('5秒経過しました!');
}
// 5 秒後に executeAfter5Seconds() を実行
setTimeout(executeAfter5Seconds, 5000);
補足
- DOMContentLoaded イベントは、DOMContentLoaded イベントが完了するまで待機するのに適しています。このイベントは、HTML ドキュメントの解析と DOM ツリーの構築が完了した後に発生します。
- load イベントは、ページ全体の読み込みが完了するまで待機するのに適しています。このイベントは、HTML ドキュメント、スタイルシート、画像、およびその他のすべての外部リソースの読み込みが完了した後に発生します。
イベントリスナーの使用
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>イベントリスナーの使用</title>
</head>
<body>
<button id="myButton">ボタンをクリック</button>
<script>
const button = document.getElementById('myButton');
button.addEventListener('click', function() {
// ボタンがクリックされた後に実行したい処理
console.log('ボタンがクリックされました!');
// 非同期処理を実行する
setTimeout(function() {
console.log('非同期処理を実行しました!');
}, 2000);
});
</script>
</body>
</html>
このコードでは、ボタン要素の click
イベントにイベントリスナーを登録しています。イベントリスナー関数は、ボタンがクリックされたときに実行され、以下の処理を行います。
- "ボタンがクリックされました!" とコンソールに出力します。
setTimeout()
関数を使用して、2 秒後に非同期処理を実行します。非同期処理は、"非同期処理を実行しました!" とコンソールに出力します。
Promise の使用
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Promise の使用</title>
</head>
<body>
<button id="myButton">ボタンをクリック</button>
<script>
const button = document.getElementById('myButton');
const clickPromise = button.addEventListener('click');
clickPromise.then(function() {
// ボタンがクリックされた後に実行したい処理
console.log('ボタンがクリックされました!');
// 非同期処理を実行する
return new Promise(function(resolve, reject) {
setTimeout(resolve, 2000);
});
}).then(function() {
console.log('非同期処理を実行しました!');
});
</script>
</body>
</html>
このコードでは、ボタン要素の click
イベントに Promise を使用しています。addEventListener()
関数は、Promise を返します。Promise が解決されると、then
メソッドに渡された関数が実行されます。
then
メソッド内では、以下の処理を行います。
- 新しい Promise が解決されると、
then
メソッドに渡された関数が実行されます。この関数では、"非同期処理を実行しました!" とコンソールに出力します。
setTimeout() の使用
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>setTimeout() の使用</title>
</head>
<body>
<button id="myButton">ボタンをクリック</button>
<script>
const button = document.getElementById('myButton');
button.addEventListener('click', function() {
// ボタンがクリックされた後に実行したい処理
console.log('ボタンがクリックされました!');
// 5 秒後に非同期処理を実行する
setTimeout(function() {
console.log('非同期処理を実行しました!');
}, 5000);
});
</script>
</body>
</html>
このコードでは、ボタン要素の click
イベントに setTimeout()
関数を使用しています。setTimeout()
関数は、ボタンがクリックされた 5 秒後に以下の処理を実行します。
上記で紹介した方法は、いずれも JavaScript で DOM イベント完了まで待機する方法として有効です。状況に応じて適切な方法を選択してください。
JavaScript で DOM イベント完了まで待機するその他の方法
MutationObserver は、DOM の変更を監視するための API です。DOM イベント完了を待機するには、以下の手順で MutationObserver を使用します。
- 監視対象の要素を指定します。
- MutationObserver オブジェクトを作成し、監視対象の要素と監視する変更の種類を指定します。
observe()
メソッドを使用して、MutationObserver オブジェクトを監視対象の要素に登録します。
// ボタン要素の DOM 構造の変化を監視
const button = document.getElementById('myButton');
const observer = new MutationObserver(function(mutations) {
// DOM 構造が変化したときに実行する処理
console.log('DOM 構造が変化しました!');
// 非同期処理を実行する
setTimeout(function() {
console.log('非同期処理を実行しました!');
}, 2000);
});
observer.observe(button, { childList: true });
// ボタンをクリックする
button.click();
このコードでは、ボタン要素の DOM 構造の変化を監視しています。ボタンがクリックされると、DOM 構造が変化し、mutationchange
イベントが発生します。mutationchange
イベントリスナー関数内では、以下の処理を行います。
カスタムイベントは、開発者が独自に定義できるイベントです。DOM イベント完了を待機するには、以下の手順でカスタムイベントを使用します。
- カスタムイベントを定義します。
- イベント発生元の要素でカスタムイベントを発生させます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>カスタムイベントの使用</title>
</head>
<body>
<button id="myButton">ボタンをクリック</button>
<script>
// カスタムイベントを定義
const buttonClickedEvent = new CustomEvent('buttonClicked');
// ボタン要素の click イベントにイベントリスナーを登録
const button = document.getElementById('myButton');
button.addEventListener('click', function() {
// ボタンがクリックされたときにカスタムイベントを発生させる
button.dispatchEvent(buttonClickedEvent);
});
// カスタムイベントのイベントリスナー関数を登録
window.addEventListener('buttonClicked', function() {
// ボタンがクリックされた後に実行したい処理
console.log('ボタンがクリックされました!');
// 非同期処理を実行する
setTimeout(function() {
console.log('非同期処理を実行しました!');
}, 2000);
});
// ボタンをクリックする
button.click();
</script>
</body>
</html>
このコードでは、buttonClicked
という名前のカスタムイベントを定義しています。ボタンがクリックされると、buttonClicked
イベントが発生し、buttonClicked
イベントリスナー関数が実行されます。buttonClicked
イベントリスナー関数内では、以下の処理を行います。
requestAnimationFrame()
関数は、ブラウザのリフレッシュレートに合わせて関数を呼び出すための API です。DOM イベント完了を待機するには、以下の手順で requestAnimationFrame()
を使用します。
requestAnimationFrame()
関数を使用して、関数を呼び出します。- 呼び出された関数内では、DOM イベントの完了を確認します。
- DOM イベントが完了したら、実行したい処理を記述します。
// ボタン要素の click イベントにイベントリスナーを登録
const button = document.getElementById('myButton');
javascript dom-events