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