この記事では、Webページで画像の読み込みに失敗したことを検知して何か処理する場合のサンプルについて解説しています。
DOMContentLoaded
イベントの中に処理を記述する次のサンプルを見てください。
「Run Pen」をクリックすると、サンプルページが開きます。
わざと画像の読み込みに失敗するようにしているので、img要素のalt属性の値がアラートに表示されるようにしています。
See the Pen
mdWpLJx by shiakisudev (@shiakisu)
on CodePen.
以下はこのサンプルのソースです。
HTML
<img id="gazo" src="sample.png" alt="サンプル画像">
js
window.addEventListener('DOMContentLoaded', function(){
document.getElementById('gazo').addEventListener('error',function(e){
alert(e.target.alt);
})
});
DOMContentLoaded
だと上手くいくのかDOMContentLoaded
イベントを定義した場合、Webページを開くと以下の順序で処理が進むからです。
DOMContentLoaded
が実行され、イベントリスナが登録されます。登録後、画像の読み込み失敗をキャッチできるようになります。
DOMContentLoaded
は、画像の読み込みを待たずに処理を実行します。load
イベントの中に処理を記述する次のサンプルはNG例です。
「Run Pen」をクリックすると、サンプルページが開きます。
画像の読み込みは失敗しますが、それをイベントリスナ内でキャッチすることはできません。
See the Pen
XWMVqEp by shiakisudev (@shiakisu)
on CodePen.
以下はこのサンプルのソースです。
HTML
<img id="gazo" src="sample.png" alt="サンプル画像">
js
window.addEventListener('load', function(){
document.getElementById('gazo').addEventListener('error',function(e){
alert(e.target.alt);
})
});
load
だとダメなのかload
イベントを定義した場合、Webページを開くと以下の順序で処理が進むからです。
load
が実行され、イベントリスナが登録されます。登録後、画像の読み込み失敗をキャッチできるようになります。load
は、HTMLの解析と画像読み込みの両方が完了してから処理を実行します。load
の場合は、イベントリスナを登録する時点で既に画像の読み込みが完了している(成功か失敗かにかかわらず)ため、イベントリスナ登録前の出来事はキャッチできないということです。以上で記事の解説はお終い!
HTML、CSS、JavaScriptをもっと勉強したい方にはUdemyがオススメ!同僚に差をつけよう!