このページで興味深いソリューションを読んだ後、SLaksとNoyoの投稿に非常に影響を受けた使いやすいソリューションを作成しました。これは、Chrome、IE、Firefox、Safari、およびOpera(すべてWindows)。また、私が使用したiPhone / iPadエミュレーターでも動作しました。
このソリューションとSLaksおよびNoyoの投稿の主な違いの1つは、このソリューションが主にnaturalWidthプロパティとnaturalHeightプロパティをチェックすることです。現在のブラウザバージョンでは、これらの2つのプロパティが最も役立つ一貫した結果を提供するようです。
このコードは、画像が完全に正常に読み込まれたときにTRUEを返します。画像がまだ完全に読み込まれていないか、読み込みに失敗した場合は、FALSEを返します。
注意が必要なことの1つは、画像が0x0ピクセル画像の場合、この関数はFALSEを返すことです。しかし、これらの画像は非常にまれであり、0x0ピクセルの画像がまだロードされているかどうかを確認する必要がある非常に便利なケースは考えられません:)
最初に、「isLoaded」という新しい関数をHTMLImageElementプロトタイプにアタッチして、その関数を任意の画像要素で使用できるようにします。
HTMLImageElement.prototype.isLoaded = function() {
// See if "naturalWidth" and "naturalHeight" properties are available.
if (typeof this.naturalWidth == 'number' && typeof this.naturalHeight == 'number')
return !(this.naturalWidth == 0 && this.naturalHeight == 0);
// See if "complete" property is available.
else if (typeof this.complete == 'boolean')
return this.complete;
// Fallback behavior: return TRUE.
else
return true;
};
次に、画像の読み込みステータスを確認する必要があるときはいつでも、「isLoaded」関数を呼び出すだけです。
if (someImgElement.isLoaded()) {
// YAY! The image loaded
}
else {
// Image has not loaded yet
}
SLaksとNoyoの投稿に対するジョージア人のコメントによると、このソリューションは、SRC属性の変更を計画している場合、Safari Mobileでの1回限りのチェックとしてのみ使用できます。ただし、既存の画像要素のSRC属性を変更する代わりに、新しいSRC属性を使用して画像要素を作成することで、この問題を回避できます。