@techmely/utils
Version:
Collection of helpful JavaScript / TypeScript utils
36 lines (33 loc) • 979 B
JavaScript
import { invariant } from './chunk-JBXZG2HJ.mjs';
import { isBrowser } from './chunk-AJMQPQGJ.mjs';
// src/useObserverElement.ts
function useObserverElement() {
invariant(isBrowser());
let observer = null;
const callbacks = /* @__PURE__ */ new Map();
const observe = (element, callback) => {
if (!observer) {
observer = new IntersectionObserver((entries) => {
for (const entry of entries) {
const callback2 = callbacks.get(entry.target);
const isVisible = entry.isIntersecting || entry.intersectionRatio > 0;
if (isVisible && callback2) {
callback2();
}
}
});
}
callbacks.set(element, callback);
observer.observe(element);
return () => {
callbacks.delete(element);
observer?.unobserve(element);
if (callbacks.size === 0) {
observer?.disconnect();
observer = null;
}
};
};
return observe;
}
export { useObserverElement };