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