Как лениво загружать элемент изображения в слайдер slick?

#lazy-loading #slick.js #webp

#ленивая загрузка #slick.js #webp

Вопрос:

Слайдер Ken Wheelers slick отлично работает с обычными изображениями, такими как jpeg. Чтобы повысить производительность загрузки, я пытаюсь работать с элементом изображения, чтобы иметь поддержку webp с резервным вариантом. Атрибут data-lazy работает только с тегом img. Есть ли решение для ленивой загрузки также изображений webp?

 <div id="slick-slider">
   <div class="item">
      <picture >
         <source srcset="{{ bild }}.webp" type="image/webp">
         <img class="img-fluid" alt="bild 1" data-lazy="{{ bild }}.jpg">
      </picture>
  </div>
  <div class="item">
      <picture >
         <source srcset="{{ bild }}.webp" type="image/webp">
         <img class="img-fluid" alt="bild 2" data-lazy="{{ bild }}.jpg">
      </picture>
  </div>
</div>
 

Ответ №1:

Слайдер slick поддерживает только тег изображения, но мы можем добавить некоторый пользовательский код для отложенной загрузки изображений для тега изображения.

Фрагмент тега изображения

 <picture>
  <source media="(min-width:650px)" data-lazy="img_pink_flowers.jpg">
  <source media="(min-width:465px)" data-lazy="img_white_flower.jpg">
  <img data-lazy="img_orange_flowers.jpg" alt="Flowers" style="width:auto;">
</picture>
 

jQuery для отложенной загрузки:

 $('.slider-selector').slick({
    lazyLoad: 'ondemand',
    slidesToShow: 1,
    slidesToScroll: 1,
    infinite: false,
    dots: true,
    arrows: false,
});

$(document).on('beforeChange', '.slider-selector', function(event, slick, currentSlide, nextSlide){
    var nextSlide = slick.$slides.get(nextSlide);
    var $slideSoureSets = $(nextSlide).find('source');
    $($slideSoureSets).each(function () {
        $(this).attr('srcset', $(this).data('lazy'));
    });
        console.log(nextSlide);
  });
 

Ответ №2:

согласно исходному коду:https://github.com/kenwheeler/slick/blob/master/slick/slick.js#L1541 использует только теги изображений. Итак, короткий ответ: вы можете написать свою собственную функцию для переопределения функции lazyload , это не должно быть слишком сложно.

Комментарии:

1. Хотите уточнить?