UNPKG

web-ui-pack

Version:
35 lines (34 loc) 1.06 kB
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); }