绑定(’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
我已经在生产中使用它并且效果非常好。 非常可靠,没有一个投诉。