@zohodesk/components
Version:
In this Package, we Provide Some Basic Components to Build Web App
49 lines (42 loc) • 1.59 kB
JavaScript
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;
}
}
}