@fancyapps/ui
Version:
Robust JavaScript UI Component Library
3 lines (2 loc) • 1.85 kB
JavaScript
/*! 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){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(a),t.classList.add(s)})):(t.classList.remove(a),t.classList.add(s)),null==l||l.emit("lazyLoad:loaded",e,t,f)})),t.addEventListener("error",(()=>{null==l||l.hideLoading(e),t.classList.remove(a),t.classList.add("has-lazyerror"),null==l||l.emit("lazyLoad:error",e,t,f)})),t.classList.add("f-lazyload"),t.classList.add(a),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,delete t.dataset.lazyBg}}}function i(){if(!l)return;const e=n().preload,t=[...l.getVisibleSlides()],a=l.getPosition(),s=l.getViewportDim();t.push(...l.getVisibleSlides(a+s*e),...l.getVisibleSlides(a-s*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};