我目前正在使用Jquery Lazy Load,我想知道是否有办法在我的容器中的所有图像结束加载时进行回调(当延迟加载使他的所有魔法都发挥作用时)。
原因是我也在使用jScrollPane 插件,我想调用 jScrollPane 重新初始化函数。
谢谢'
我目前正在使用Jquery Lazy Load,我想知道是否有办法在我的容器中的所有图像结束加载时进行回调(当延迟加载使他的所有魔法都发挥作用时)。
原因是我也在使用jScrollPane 插件,我想调用 jScrollPane 重新初始化函数。
谢谢'
查看源代码,似乎延迟加载插件settings.load
在加载图像后调用该函数,并传递加载的图像元素和几个参数:
if (settings.load) {
var elements_left = elements.length;
settings.load.call(self, elements_left, settings);
}
因此,您可能只需要设置如下内容:
function yourhandler(element, el_left, settings) {
//Whatever you want
//This function will be called each time that an image (element in this case) is loaded
}
$("img.lazy").lazyload({
load : yourhandler
});
如果要确保图像已加载,可以将侦听器附加到加载的图像:
function yourhandler(element, el_left, settings) {
element.load(function() {
alert('Image Loaded');
});
}
尝试代码后,最“干净”的方法是附加到.load
图像的方法:
$('img.lazy').load(function() {
console.log($(this).attr('src') + ' loaded');
});
$('img.lazy').lazyload({
container:$('.p_content'),
});
为了处理最后加载的图像并仅在完成时运行代码(所有图像已加载),您必须使用处理函数,正如 VAShhh 之前所说的,不像函数调用应该只发送 2 个参数,因此调用此函数带有javascript调用语句。
然后您将能够成功检索“ elements_left ”参数并将其与 0(零)进行比较:最后加载的图像左侧。像这样的东西:
function yourhandler(elements_left, settings) {
var imageNode, container;
if(elements_left === 0) {
// All images were loaded.
// Now do whatever you need with imageNode or its parents (container, etc) in order
// to run any other Plugin
imageNode = $(this);
container = settings.container;
alert('Ready to continue! Image node is $(this) and container settings.container');
}
}
请在以下位置查看此示例:jsfiddle.net/eRyww/4
作为替代答案,我创建了一个“延迟加载”插件来做到这一点。它在所有元素加载后提供回调。它有点不同,不仅适用于图像,而且任何时候选定的元素都会出现在浏览器视图窗格中。