如何使用JavaScript或jQuery检测图像何时完成加载,无论是从服务器还是浏览器缓存中加载?
我希望在同一个<img/>
标签中加载各种图像,并检测新图像的加载何时完成。
如何使用JavaScript或jQuery检测图像何时完成加载,无论是从服务器还是浏览器缓存中加载?
我希望在同一个<img/>
标签中加载各种图像,并检测新图像的加载何时完成。
$('img').on('load', function() {
// do whatever you want
});
src
,那么如果图像被缓存,则在您有时间分配它之前,加载事件会触发..例如http://www.jsfiddle.net/gaby/Xdeh4/(*第一张图片不会触发加载事件*),但重新阅读问题后,我发现OP有特定的要求,不会遇到这个问题,因为他对更改现有标记的`src`感兴趣。 - Gabriele Petriolionload
文档事件只有在所有元素(包括图片)完全加载后才会触发。
onload
<img>事件将在单个图像完全加载后触发。
因此,您可以使用jQuery对象或DOM的addEventListener(以及IE的attachEvent)附加侦听器到这些事件。
$('img').load(function() {
// Your img has finished loading!
});
这是一个我昨天看到的相当古老的帖子。 我正在使用backbone.js和require.js,并且调整我的布局总是导致包含图像的视图出现问题。
因此,我需要一种方法来知道最后一张图像何时加载完成以调整布局。 所有上述提到的解决方案在我的情况下都不起作用。 经过几个小时的调查后,我找到了最终有效的解决方案:
http://desandro.github.com/imagesloaded/
希望这也能帮助其他人。
使用jQuery时,你可以使用
$(document).ready()
在DOM加载完成后执行某些操作,而使用$(window).load()
在所有其他东西都加载完成后执行某些操作,例如图片。
以下是两个示例:
##DOM
jQuery(document).ready(function(){
console.log('DOM ready');
});
##图片/其他
jQuery(window).load(function(){
console.log('all other things ready');
});
您应该能够在控制台中确认:
大家都提到事件应该在设置src之前触发。
但是如果你不想担心这个问题,可以使用oncomplete
事件(即使使用缓存的图像也会触发)来触发onload
,像这样:
$("img").one("load", function() {
// do stuff
}).each(function() {
if(this.complete) $(this).load();
});
使用jQuery,您不必担心向后兼容性(例如:img.height>0
在IE
中)