UNPKG

@fancyapps/ui

Version:

Robust JavaScript UI Component Library

3 lines (2 loc) 2.01 kB
/*! 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},n="is-lazyloading",o="is-lazyloaded",l="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="[data-lazy-src],[data-lazy-srcset],[data-lazy-bg]",u=Array.from(r.querySelectorAll(c));r.matches(c)&&u.push(r);for(const r of u){const c=r.dataset.lazySrc,u=r.dataset.lazySrcset,f=r.dataset.lazySizes,m=r.dataset.lazyBg,y=(r instanceof HTMLImageElement||r instanceof HTMLSourceElement)&&(c||u),z=r instanceof HTMLElement&&m;if(!y&&!z)continue;const g=c||u||m;if(g){if(y&&g){const m=null===(s=r.parentElement)||void 0===s?void 0:s.classList.contains("f-panzoom__wrapper");d().showLoading&&(null==i||i.showLoading(t)),r.addEventListener("load",(()=>{null==i||i.hideLoading(t),a(r,l),r instanceof HTMLImageElement?r.decode().then((()=>{a(r,n),e(r,o)})):(a(r,n),e(r,o)),m||null==i||i.emit("lazyLoad:loaded",t,r,g)})),r.addEventListener("error",(()=>{null==i||i.hideLoading(t),a(r,n),e(r,l),m||null==i||i.emit("lazyLoad:error",t,r,g)})),r.classList.add("f-lazyload"),r.classList.add(n),m||null==i||i.emit("lazyLoad:load",t,r,g),c&&(r.src=c),u&&(r.srcset=u),f&&(r.sizes=f)}else if(z){if(!document.body.contains(r)){document.createElement("img").src=m}r.style.backgroundImage=`url('${m}')`}delete r.dataset.lazySrc,delete r.dataset.lazySrcset,delete r.dataset.lazySizes,delete r.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};