在阅读了本页上有趣的解决方案之后,我创建了一个易于使用的解决方案,该解决方案深受SLaks和Noyo的帖子的影响,该帖子似乎正在使用Chrome,IE,Firefox,Safari和Opera(所有在Windows上)。另外,它还可以在我使用的iPhone / iPad模拟器上运行。
该解决方案与SLaks和Noyo的文章之间的主要区别在于,该解决方案主要检查naturalWidth和naturalHeight属性。我发现在当前的浏览器版本中,这两个属性似乎提供了最有用和一致的结果。
当图像已完全且成功加载后,此代码将返回TRUE。当图像尚未完全加载或加载失败时,它将返回FALSE。
您需要注意的一件事是,如果图像是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
}
根据giorgian对SLaks和Noyo的帖子的评论,如果您打算更改SRC属性,则该解决方案可能只能用作Safari Mobile的一次性检查。但是,您可以通过使用新的SRC属性创建图像元素而不是在现有图像元素上更改SRC属性来解决此问题。