Показать сообщение отдельно
  #1 (permalink)  
Старый 11.02.2019, 14:42
Аватар для Duda.Ml1986@gmail.com
Профессор
Отправить личное сообщение для Duda.Ml1986@gmail.com Посмотреть профиль Найти все сообщения от Duda.Ml1986@gmail.com
 
Регистрация: 01.09.2011
Сообщений: 263

Ленивая загрузка изображений через Promise. Цепочка.
Здравствуйте,
Нужно было сделать отложенную загрузку изображений.
Для этого перед выводом html все src для img заменил на data-src. (php)
Что бы не грузились изначально.
Потом через Promise создавал изображения с путями из спрятанных файлов, параметр брался из data-src. Когда созданное изображение загружалось, я добавлял отсутствующий атрибут src скрытому изображению.

Вопрос в том как сделать загрузку в цепочке. То есть загрузка одного изображения и его полная загрузка вызывала бы загрузку другого изображения. Сейчас все создаётся одновременно и все файлы грузятся параллельно(я так думаю).




images_sidebar = $('#sidebar_menu_news_container img[data-src]');
    $.each( images_sidebar, function( key, value ) {
        lazeImageLoad(value);
    });

    function lazeImageLoad(image) {
        let promise = new Promise((resolve, reject) => {
            img = document.createElement('img');
            img.src = $(image).attr('data-src');

            if (img.complete) {
                resolve(image);
            } else {
                img.addEventListener('load',  resolve(image));
            }
        });

        promise
            .then(
                result => {
                image.src = $(image).attr('data-src');
        },
            error => {}
        );
    }
Ответить с цитированием