Решение заключается в создании пользовательского обработчика событий, который запускает при загрузке всех изображений.Это работает как талисман:
var $images = $('img.lazyload')
, $window = $(window)
, alreadyLoaded = []
, totalNumImages = $images.length // stays the same
;//var
function doLazyLoad() {
$.each($images, function(i) {
if ( alreadyLoaded[i] ) {
return; // Quit asap if already loaded.
}
if ( inViewport(this) ) { // inViewport and loadImage
loadImage(this); // are defined elsewhere.
alreadyLoaded[i] = 1; // Add item to array.
}
});
// Trigger custom event when all have been loaded:
if ( alreadyLoaded.join('').length === totalNumImages ) {
$images.trigger('customEventAllLoaded.myNamespace');
}
}//doLazyLoad
// Attach doLazyLoad() to the scroll event:
$window.on('scroll.myNamespace', doLazyLoad);
// When the custom event is triggered, run a one-time event
// handler that detaches doLazyLoad() from the scroll event.
$images.one('customEventAllLoaded.myNamespace', function() {
$window.off('scroll.myNamespace', doLazyLoad);
});
В документах рекомендуется использовать вкл / выкл, а не связывать / откреплять.Оба способа будут работать для этого.Метод $. One () запускается только один раз.