@fancyapps/ui
Version:
Robust JavaScript UI Component Library
3 lines (2 loc) • 1.93 kB
JavaScript
/*! License details at fancyapps.com/license */
import{addClass as e}from"../utils/addClass.js";import{isPlainObject as t}from"../utils/isPlainObject.js";import{removeClass as a}from"../utils/removeClass.js";const s={showLoading:!0,preload:1},l="is-lazyloading",o="is-lazyloaded",n="has-lazyerror",i=()=>{let i;function d(){const e=null==i?void 0:i.getOptions().Lazyload;return t(e)?Object.assign(Object.assign({},s),e):s}function r(t){var s;const r=t.el;if(!r)return;const c=d(),u="[data-lazy-src],[data-lazy-srcset],[data-lazy-bg]",f=Array.from(r.querySelectorAll(u));r.matches(u)&&f.push(r);for(const d of f){const r=d.dataset.lazySrc,u=d.dataset.lazySrcset,f=d.dataset.lazySizes,y=d.dataset.lazyBg,z=(d instanceof HTMLImageElement||d instanceof HTMLSourceElement)&&(r||u),g=!!y;if(!z&&!g)continue;const m=r||u||y;if(m){if(z){const y=null===(s=d.parentElement)||void 0===s?void 0:s.classList.contains("f-panzoom__wrapper");c.showLoading&&(null==i||i.showLoading(t)),d.addEventListener("load",()=>{null==i||i.hideLoading(t),a(d,n),d instanceof HTMLImageElement?d.decode().finally(()=>{a(d,l),e(d,o)}).catch(()=>{}):(a(d,l),e(d,o)),y||null==i||i.emit("lazyLoad:loaded",t,d,m)}),d.addEventListener("error",()=>{null==i||i.hideLoading(t),a(d,l),e(d,n),y||null==i||i.emit("lazyLoad:error",t,d,m)}),d.classList.add("f-lazyload"),d.classList.add(l),y||null==i||i.emit("lazyLoad:load",t,d,m),r&&(d.src=r),u&&(d.srcset=u),f&&(d.sizes=f)}else g&&(d.style.backgroundImage=`url('${y}')`);delete d.dataset.lazySrc,delete d.dataset.lazySrcset,delete d.dataset.lazySizes,delete d.dataset.lazyBg}}}function c(){if(!i)return;const e=[...i.getVisibleSlides()],t=d().preload;if(t>0){const a=i.getPosition(),s=i.getViewportDim();e.push(...i.getVisibleSlides(a+s*t),...i.getVisibleSlides(a-s*t))}for(const t of e)r(t)}return{init:function(e){i=e,i.on("render",c)},destroy:function(){null==i||i.off("render",c),i=void 0}}};export{i as Lazyload};