UNPKG

@zohodesk/components

Version:

In this Package, we Provide Some Basic Components to Build Web App

49 lines (42 loc) 1.59 kB
let observerCallbacks = null; let intersectionObserver = null; function handleObserverCallbacks(entries) { entries.forEach(entry => { let oldCallbacks = observerCallbacks.get(entry.target); if (Array.isArray(oldCallbacks) && oldCallbacks.length) { oldCallbacks.forEach(callback => { callback && callback(entry); }); } }); } export function addIntersectionObserver(element, callback, options) { if (!!element && typeof callback == 'function') { if (intersectionObserver === null && observerCallbacks === null) { intersectionObserver = new IntersectionObserver(entries => { handleObserverCallbacks(entries); }, options); observerCallbacks = new Map(); } intersectionObserver.observe(element); let oldCallbacks = observerCallbacks.get(element) || []; observerCallbacks.set(element, [...oldCallbacks, callback]); } } export function removeIntersectionObserver(element, callback) { if (!!element && typeof callback == 'function') { let oldCallbacks = observerCallbacks ? observerCallbacks.get(element) : null; if (Array.isArray(oldCallbacks)) { let callbacks = oldCallbacks.filter(handler => handler !== callback); if (intersectionObserver && callbacks.length === 0) { observerCallbacks.delete(element); intersectionObserver.unobserve(element); } } if (intersectionObserver && observerCallbacks && observerCallbacks.size === 0) { intersectionObserver.disconnect(); intersectionObserver = null; observerCallbacks = null; } } }