2013-02-25 98 views
1

我有一个img元素,每一次我动态地改变它的SRC我想获得新的图像的宽度(这是完全加载后)jQuery的加载图像动态

.load()似乎不会触发,如果图像是在缓存中已经(?),但我不希望在这种情况下再次加载它,如:

'image.jpg?' + new Date().getTime(); 

什么是做到这一点的最好办法(?)?

编辑:

$('#test img:first').load(function() { 
    console.log($(this).width()); 
}); 

看来它不会触发如果在缓存中的照片已经

+1

哪里是你的代码调用'.load'? – 2013-02-25 18:22:36

+0

您可以将.attr('width')链接到您用来更改src的任何代码吗?你需要发布你的代码,并澄清你的问题,这很混乱。 – eipark 2013-02-25 18:23:36

回答

3

​​如果图像在缓存中并且在某些浏览器(IE)的图像上设置.src属性之前没有安装onload处理程序,则不会触发。

如果图像是使用javascript动态创建的,那么只需确保onload处理程序已分配,然后设置.src属性。

如果图像位于页面HTML中,那么保证您为该特定图像获取onload事件的唯一方法是如果您在HTML本身中指定了onload处理程序。没有办法用JavaScript为HTML中的图像安装onload处理程序,并确保它被调用,因为图像可能已在任何JavaScript运行之前加载。

您可以检查图像是否已经加载了.complete属性。

所以,一个变通在你的HTML的图像会是这样:

var img = $('#test img:first'); 
if (!img[0].complete) { 
    img.load(function() { 
     // onload code here 
    }); 
} else { 
    // image already loaded 
} 
1

在现代浏览器中,你可以使用complete属性来检查图像已完成,即使它的缓存加载。喜欢的东西:

$("#myimg").on('load', function() { /* get new width */ }); 

if ($("#myimg").attr('src', 'image.jpg').prop('complete')) { 
    /* get new width */ 
} 

(以防万一.prop不起作用,你可以使用.get(0).complete)。