web-ui-pack
Version:
Web package with UI elements
35 lines (34 loc) • 1.06 kB
JavaScript
export default function onScrollStop(el, listener, options) {
let { scrollTop: y, scrollLeft: x } = el;
let id;
let wasScrolled = false;
const check = async () => {
let i = 0;
while (1) {
++i;
await new Promise((resolve) => (id = requestAnimationFrame(resolve)));
if (id === null) {
return;
}
const isScrolled = el.scrollTop !== y || el.scrollLeft !== x;
if (isScrolled) {
wasScrolled = true;
y = el.scrollTop;
x = el.scrollLeft;
i = 0;
}
else if (i === 3) {
if (wasScrolled || options?.onceNotStarted) {
setTimeout(() => listener.call(el));
if (options?.once || options?.onceNotStarted) {
return;
}
}
wasScrolled = false;
i = 0;
}
}
};
check();
return () => (id = null);
}