Advertisement
valeraplusplus

LazyLoad

Sep 22nd, 2022 (edited)
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function LazyLoad(params) {
  2.     var shop2_gr = {};
  3.     shop2_gr.settings = {};
  4.  
  5.     var elem = 'gr_images_lazy_load';
  6.     var margin = '10px';
  7.  
  8.     if (params) {
  9.         if (params.selector) {
  10.             elem = params.selector;
  11.         };
  12.        
  13.         if (params.margin) {
  14.             margin = params.margin;
  15.         };
  16.     };
  17.    
  18.     let options = {
  19.         rootMargin: margin
  20.     };
  21.     shop2_gr.settings.imageObserver = new IntersectionObserver((entries, imgObserver) => {
  22.         entries.forEach((entry) => {
  23.             if (entry.isIntersecting) {
  24.                 const lazyImage = entry.target // Текущий элемент
  25.                
  26.                 if (lazyImage.tagName == 'IMG') { // для обычных картинок
  27.                     if (lazyImage.dataset.srcset) {
  28.                         // Чтобы загружать картинки маленьких размеров с помощью srcset
  29.                         lazyImage.srcset = lazyImage.dataset.srcset // Адрес картинки data-srcset=""
  30.                         lazyImage.classList.remove(elem);
  31.                         imgObserver.unobserve(lazyImage);
  32.                     } else {
  33.                         lazyImage.src = lazyImage.dataset.src // Адрес картинки data-src=""
  34.                         lazyImage.classList.remove(elem);
  35.                         imgObserver.unobserve(lazyImage);
  36.                     }
  37.                 } else if (lazyImage.dataset.bg) {
  38.                     if (window.innerWidth <= 768 && lazyImage.dataset.minbg) {
  39.                         lazyImage.style.backgroundImage = 'url(' + lazyImage.dataset.minbg + ')';
  40.                         lazyImage.classList.remove(elem);
  41.                         imgObserver.unobserve(lazyImage);
  42.                     } else {
  43.                         lazyImage.style.backgroundImage = 'url(' + lazyImage.dataset.bg + ')';
  44.                         lazyImage.classList.remove(elem);
  45.                         imgObserver.unobserve(lazyImage);
  46.                     }
  47.                 } else if (lazyImage.dataset.func) { // Если элемент содержит data-func
  48.                     if (typeof shop2_gr.methods[lazyImage.dataset.func] == 'function') {
  49.                         shop2_gr.methods[lazyImage.dataset.func](lazyImage); // Вызов функции
  50.                         lazyImage.classList.remove(elem);
  51.                         imgObserver.unobserve(lazyImage);
  52.                     }
  53.                 } else {
  54.                     lazyImage.classList.remove(elem);
  55.                     imgObserver.unobserve(lazyImage);
  56.                 }
  57.             }
  58.         })
  59.     }, options);
  60.  
  61.     const arr = document.querySelectorAll('.' + elem);
  62.    
  63.     arr.forEach((v) => {
  64.         shop2_gr.settings.imageObserver.observe(v);
  65.     });
  66. }; /*Отложенная загрузка*/
  67.  
  68. document.addEventListener('DOMContentLoaded', function(){
  69.     LazyLoad();
  70. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement