JavaScriptを使って、loadイベントを設定する方法や動作するタイミングについて書いています。
loadイベントを使うと、ページやリソースが完全に読み込まれたときに処理を実行することができます。
実際に動くサンプルを使いつつ、以下について書いています。
・loadイベントをつける方法
・loadイベントの動作するタイミングは?
loadイベントとは?
load
イベントは、ページ全体のリソース(画像、スクリプトなどを含む)が完全に読み込まれたときに発生するイベントです。
これにより、ユーザーがページ上のすべての要素を利用可能になったタイミングで処理を実行することができます。
loadイベントをつける方法
load
イベントを設定する方法として、window.onload
を使う方法と、addEventListener
メソッドを使う方法があります。
window.onloadでイベントを設定する
window.onload
を使って、ページが読み込まれた時に処理する例です。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Window Load Event Example</title>
</head>
<body>
<h1>ページが完全に読み込まれました</h1>
<script>
window.onload = function() {
alert('ページが完全に読み込まれました');
};
</script>
</body>
</html>
簡単なHTMLページを作成しました。
スクリプト内でwindow.onload
を使って、処理を書いています。
このようにwindow.onload
に対して代入して、無名関数の中に処理を書くとページを読み終わった後に処理されます。
動作確認
動作を確認すると、ページを開いて、読み込まれたときにアラートダイアログが表示されました。
addEventListenerを使ってイベントをつける
addEventListener
メソッドを使って、load
イベントを設定する方法です。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>AddEventListener Load Event Example</title>
</head>
<body>
<h1>ページが完全に読み込まれました</h1>
<script>
window.addEventListener('load', function() {
alert('ページが完全に読み込まれました');
});
</script>
</body>
</html>
window
からaddEventListener
メソッドを呼び出して、第1引数にload
を指定しました。
第2引数に無名関数を指定して実行したい内容を書きました。
こちらも先ほどと同じように動作します。
loadイベントの動作するタイミングは?
load
イベントは、ページ全体のリソース(画像、スクリプトなどを含む)が完全に読み込まれた後に発生します。
これにより、ページ上のすべての要素が利用可能な状態で処理を実行することができます。
通常、load
イベントは以下のタイミングで発生します。
- ページ全体が読み込まれた後
- すべての画像、スクリプト、スタイルシートなどのリソースが読み込まれた後
リソースが読み込まれていなくて失敗するパターン
例えば、下記のようにhead
タグにHTML要素を変更するスクリプトを書いたときです。
<html lang="ja">
<head>
<title>Window Load Failed Example</title>
<script>
const test1Div = document.querySelector('#test1');
test1Div.innerHTML = '書き換えテスト';
const testImage = document.querySelector('#test-img');
testImage.width = 500;
</script>
</head>
<body>
<div id="test1">
テスト1です!
</div>
<div id="test2">
テスト2です!
</div>
<img src="mouse_cheese.png" id="test-img" width="100" />
</body>
</html>
id
属性がtest1
のdiv
タグとtest2
のdiv
タグを最初に書いています。
そして、次にimg
タグを用意しています。
head
タグにtest1
のdiv
タグの中身を書き換える処理とimg
タグの横幅を書き換える処理を書いていますが
このタイミングだとHTMLが全て読み込まれてないため、うまく動作しません。
確認すると、下記のように変わっていないことが確認できます。
loadイベントを使って読み込まれてから処理
load
イベントを使うことで、読み込まれてから処理することができます。
先ほどのスクリプトを下記のように、書き換えました。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Window Load Success Example</title>
<script>
window.addEventListener('load', function() {
const test1Div = document.querySelector('#test1');
test1Div.innerHTML = '書き換えテスト';
const testImage = document.querySelector('#test-img');
testImage.width = 500;
});
</script>
</head>
<body>
<div id="test1">
テスト1です!
</div>
<div id="test2">
テスト2です!
</div>
<img src="mouse_cheese.png" id="test-img" width="100" />
</body>
</html>
addEventListener
メソッドで、load
を指定して読み込まれた後に実行されるようにしました。
こうするとhead
タグの中に書いていた場合でも、読み込まれた後に実行されるためHTML要素を書き換える処理が動作します。
確認すると、下記のように書きかわったことが確認できます。
JavaScriptでloadイベントを設定する方法まとめ
JavaScriptを使って、load
イベントを設定する方法と動作タイミングについて書きました。
以下のポイントをまとめます。
・window.onloadやJavaScriptのaddEventListenerメソッドを使って、loadイベント時の処理を設定できた。
・loadイベントを使わない場合には処理する場所によって、HTML要素を読み込むことができずに失敗した。
コメント