绑定(’load’)的jQuery替代用于图像

可能重复:
jQuery回调图像加载(即使图像被缓存)

所以在jQuery中不推荐使用.load()方法。 load()是`bind(’load’,function)的快捷方式。

来自http://api.jquery.com/load-event/ :

与图像一起使用时加载事件的注意事项

开发人员尝试使用.load()快捷方式解决的常见挑战是在图像(或图像集合)完全加载时执行函数。 应该注意有几个已知的警告。 这些是:

它不能一致地工作也不能可靠地跨浏览器如果图像src设置为与之前相同的src它在WebKit中无法正确激活它没有正确地冒泡DOM树可以停止为已经存在的图像触发在浏览器的缓存中

如何一致地执行图像加载function? 我的当前代码如下所示:

 $(newImage).bind('load', function() { createSlices(slide); }); 

但是在阅读完文档后(虽然我没有注意到任何问题)我担心它可能不会引起一些用户的注意。

试试这个插件man:调用waitforimages插件: https : //github.com/alexanderdickson/waitForImages ( 向下滚动链接,你会看到各种高级用法 ) – 演示 http://jsfiddle.net/FZ7Xy/

希望它符合需要:)

 $('selector').waitForImages(function() { // All descendant images have loaded, now slide up. $(this).slideUp(); }); 
 var img = new Image(); img.onload = function() { } img.src= src-image 

上面的代码适用于所有浏览器,甚至没有jquery。

您可以担心,如果图像被缓存,IE7 / 8有时会无法触发加载事件。

一种技术是在绑定加载事件后立即检查图像是否完整:

 $(newImage).bind('load error', function() { createSlices(slide); }); // check if the image is immediately complete (cached) if (newImage.complete || typeof newImage.complete === 'undefined') { createSlices(slide); } 

我已成功测试过:

  • IE 7/8/9/10
  • FF4 +
  • Chrome(最新)
  • Safari 5+

有一个很好的库可以处理这个: https : //github.com/desandro/imagesloaded

我已经在生产中使用它并且效果非常好。 非常可靠,没有一个投诉。