是否可以通过jQuery事件检测何时加载所有图像?
理想情况下,应该有一个
$(document).idle(function() { }
要么
$(document).contentLoaded(function() { }
但我找不到这样的事情.
我想过附上这样的事件:
$(document).ready(function() { var imageTotal = $('img').length; var imageCount = 0; $('img').load(function(){if(++imageCount == imageTotal) doStuff();}); }
但如果图像无法加载,这会破坏吗?在正确的时间调用该方法至关重要.
根据jQuery的文档,有一些注意事项可以将load事件与图像一起使用.正如另一个答案所述,ahpi.imgload.js插件已损坏,但链接的Paul Irish gist已不再维护.
Per Paul Irish,用于检测图像加载完成事件的规范插件现在位于:
https://github.com/desandro/imagesloaded
如果要检查的不是所有图像,而是特定的图像(例如,在DOM已经完成后动态替换的图像),您可以使用:
$('#myImage').attr('src', 'image.jpg').on("load", function() { alert('Image Loaded'); });
您可以使用我的插件waitForImages来处理这个...
$(document).waitForImages(function() { // Loaded. });
这样做的好处是你可以将它本地化为一个祖先元素,它可以选择检测CSS中引用的图像.
这只是冰山一角,请查看文档以获取更多功能.
不保证使用jQuery $().load()作为IMG事件处理程序.如果图像从缓存加载,某些浏览器可能无法触发该事件.对于(较旧的)版本的Safari,如果您将IMG元素的SRC属性更改为相同的值,则onload事件将不会触发.
看来这在最新的jQuery(1.4.x) - http://api.jquery.com/load-event中得到了认可- 引用:
如果从浏览器缓存加载图像,则可能不会触发加载事件.为了解释这种可能性,我们可以使用特殊的加载事件,如果图像准备就会立即触发.event.special.load目前作为插件提供.
现在有一个插件来识别这种情况和IE的IMG元素加载状态的"完整"属性:http: //github.com/peol/jquery.imgloaded/raw/master/ahpi.imgload.js
根据这个答案,你可以在对象上使用jQuery load事件window
而不是document
:
jQuery(window).load(function() { console.log("page finished loading now."); });
这将在加载页面上的所有内容后触发.这与jQuery(document).load(...)
DOM完成加载后触发的不同.