Viewing File: /home/ubuntu/misabloom-frontend-base/node_modules/@motionone/dom/dist/gestures/in-view.es.js
import { resolveElements } from '../utils/resolve-elements.es.js';
const thresholds = {
any: 0,
all: 1,
};
function inView(elementOrSelector, onStart, { root, margin: rootMargin, amount = "any" } = {}) {
/**
* If this browser doesn't support IntersectionObserver, return a dummy stop function.
* Default triggering of onStart is tricky - it could be used for starting/stopping
* videos, lazy loading content etc. We could provide an option to enable a fallback, or
* provide a fallback callback option.
*/
if (typeof IntersectionObserver === "undefined") {
return () => { };
}
const elements = resolveElements(elementOrSelector);
const activeIntersections = new WeakMap();
const onIntersectionChange = (entries) => {
entries.forEach((entry) => {
const onEnd = activeIntersections.get(entry.target);
/**
* If there's no change to the intersection, we don't need to
* do anything here.
*/
if (entry.isIntersecting === Boolean(onEnd))
return;
if (entry.isIntersecting) {
const newOnEnd = onStart(entry);
if (typeof newOnEnd === "function") {
activeIntersections.set(entry.target, newOnEnd);
}
else {
observer.unobserve(entry.target);
}
}
else if (onEnd) {
onEnd(entry);
activeIntersections.delete(entry.target);
}
});
};
const observer = new IntersectionObserver(onIntersectionChange, {
root,
rootMargin,
threshold: typeof amount === "number" ? amount : thresholds[amount],
});
elements.forEach((element) => observer.observe(element));
return () => observer.disconnect();
}
export { inView };
Back to Directory
File Manager