Подтвердить что ты не робот

Обратный вызов Jquery Lazyload

В настоящее время я использую Jquery Lazy Load, и мне было интересно, есть ли способ сделать обратный вызов, когда все изображения из моего контейнера закончились загрузка (когда ленивая нагрузка сделала всю его магию).

Причиной этого является то, что я использую jScrollPane Plugin, и я хотел бы назвать функцию повторного инициализации jScrollPane.

Спасибо

4b9b3361

Ответ 1

Посмотрев на источник, кажется, что плагин с ленивой загрузкой вызывает функцию 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'),
});​

http://jsfiddle.net/eRyww/72/

Ответ 2

Для обработки последнего загруженного изображения и запуска кода только и только после его завершения (все изображения загружены) вы должны использовать функцию обработчика, как ранее говорилось в 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

Ответ 3

В качестве альтернативного ответа я создал плагин "ленивой загрузки", который будет делать именно это. Он предлагает обратный вызов после загрузки всех элементов. Это немного отличается и не совсем просто для изображений, но в любое время выбранные элементы попадают в поле просмотра браузера.

https://github.com/shrimpwagon/jquery-lazyloadanything