UNPKG

@fancyapps/ui

Version:

Robust JavaScript UI Component Library

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