2011-04-12 69 views
1

我想知道如果查看图像的height属性是查看它是否已加载的可靠方法。加载图像时运行回调

比方说,我得的图像的参考,像这样:

var img = document.getElementById('myImg'); 

如果我想运行一些代码,依靠在图像上加载,我可以把它放在一个回调,并运行img.onload = myCallback;

但是,如果图像已经加载之前此代码运行,则回调将不会执行。

这是一个可能的解决方案:

if (img.height && img.height > 0) { 
    myCallback(); 
} 
else { 
    img.onload = myCallback; 
} 

换句话说:运行myCallback现在如果图像已被加载,否则等到它的加载。

但我有一种感觉,这个代码可能是脆弱的......它会在所有情况下工作吗?有没有更安全或更优雅的做法?

+0

是图像添加到DOM动态(通过JavaScript),或者是它的基础上的'来自HTML源代码的''元素? – 2011-04-12 10:48:02

+0

在这种情况下,在HTML代码中。我的JavaScript在img元素被解析后运行,所以它甚至可能已经被加载(特别是如果它在缓存中),或者它可能尚未加载。 – callum 2011-04-12 10:52:49

回答

2

您正在寻找complete住宅。不过,我不认为这可以可靠地工作在所有的Firefox版本,所以这是很好的补充您的身高检查备份:

if (img.complete) { 
    myCallback(); 
} else if (img.height && img.height > 0) { 
    myCallback(); 
} else { 
    img.onload = myCallback; 
} 
+0

'complete'属性适用于所有当前浏览器 - [demo](http://jsfiddle.net/simevidas/MyjMU/1/)。 – 2011-04-12 11:02:44

+1

'myCallback.call(img)'而不是'myCallback()' - 我们希望回调中的this值引用img元素。否则,回调不知道哪个图像已加载。 – 2011-04-12 11:16:29

+0

**现场演示:** http://jsfiddle.net/simevidas/MyjMU/2/ – 2011-04-12 11:18:02