在阅读了此页面上有趣的解决方案后,我创建了一个易于使用的解决方案,该解决方案深受 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 属性。