EmbyCrackedClient/web/modules/lazyloader/lazyloader-intersectionobserver.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
1.4 KiB
JavaScript

import browser from"./../browser.js";function LazyLoader(options){this.options=options}LazyLoader.prototype.createObserver=function(){var observerOptions={},options=this.options;let loadedCount=0,callback=options.callback,observerId=(browser.edge||(observerOptions.rootMargin="50%"),"obs"+Date.now()),self=this,observer=new IntersectionObserver(function(entries){for(let j=0,length2=entries.length;j<length2;j++){var entry=entries[j];let isIntersecting=entry.isIntersecting;(isIntersecting=null==isIntersecting?0<entry.intersectionRatio:isIntersecting)&&(entry=entry.target,observer.unobserve(entry),entry[observerId]||(entry[observerId]=1,callback(entry),++loadedCount>=self.elementCount&&self.destroyObserver()))}},observerOptions);this.observer=observer},LazyLoader.prototype.addElements=function(elements){let observer=this.observer;observer||(this.createObserver(),observer=this.observer),this.elementCount=(this.elementCount||0)+elements.length;for(let i=0,length=elements.length;i<length;i++)observer.observe(elements[i])},LazyLoader.prototype.destroyObserver=function(elements){var observer=this.observer;observer&&(observer.disconnect(),this.observer=null)},LazyLoader.prototype.destroy=function(elements){this.destroyObserver(),this.options=null},LazyLoader.lazyChildren=function(elem,callback){elem=elem.getElementsByClassName("lazy");elem.length&&new LazyLoader({callback:callback}).addElements(elem)};export default LazyLoader;