Viewing File: /home/ubuntu/vedadeals-frontend-base/node_modules/@motionone/dom/lib/gestures/scroll/index.js
import { __rest } from "tslib";
import { resize } from "../resize/index";
import { createScrollInfo } from "./info";
import { createOnScrollHandler } from "./on-scroll-handler";
const scrollListeners = new WeakMap();
const resizeListeners = new WeakMap();
const onScrollHandlers = new WeakMap();
const getEventTarget = (element) => element === document.documentElement ? window : element;
export function scroll(onScroll, _a = {}) {
var { container = document.documentElement } = _a, options = __rest(_a, ["container"]);
let containerHandlers = onScrollHandlers.get(container);
/**
* Get the onScroll handlers for this container.
* If one isn't found, create a new one.
*/
if (!containerHandlers) {
containerHandlers = new Set();
onScrollHandlers.set(container, containerHandlers);
}
/**
* Create a new onScroll handler for the provided callback.
*/
const info = createScrollInfo();
const containerHandler = createOnScrollHandler(container, onScroll, info, options);
containerHandlers.add(containerHandler);
/**
* Check if there's a scroll event listener for this container.
* If not, create one.
*/
if (!scrollListeners.has(container)) {
const listener = () => {
const time = performance.now();
for (const handler of containerHandlers)
handler.measure();
for (const handler of containerHandlers)
handler.update(time);
for (const handler of containerHandlers)
handler.notify();
};
scrollListeners.set(container, listener);
const target = getEventTarget(container);
window.addEventListener("resize", listener, { passive: true });
if (container !== document.documentElement) {
resizeListeners.set(container, resize(container, listener));
}
target.addEventListener("scroll", listener, { passive: true });
}
const listener = scrollListeners.get(container);
const onLoadProcesss = requestAnimationFrame(listener);
return () => {
var _a;
if (typeof onScroll !== "function")
onScroll.stop();
cancelAnimationFrame(onLoadProcesss);
/**
* Check if we even have any handlers for this container.
*/
const containerHandlers = onScrollHandlers.get(container);
if (!containerHandlers)
return;
containerHandlers.delete(containerHandler);
if (containerHandlers.size)
return;
/**
* If no more handlers, remove the scroll listener too.
*/
const listener = scrollListeners.get(container);
scrollListeners.delete(container);
if (listener) {
getEventTarget(container).removeEventListener("scroll", listener);
(_a = resizeListeners.get(container)) === null || _a === void 0 ? void 0 : _a();
window.removeEventListener("resize", listener);
}
};
}
//# sourceMappingURL=index.js.map
Back to Directory
File Manager