Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | export const mousePosition = { x: 0, y: 0, }; let initialized = false; export const initMouseTracking = () => { Iif (initialized) return; initialized = true; window.addEventListener( "mousemove", (e) => { mousePosition.x = e.clientX; mousePosition.y = e.clientY; }, { passive: true }, ); }; export const isElementHovered = (el: HTMLElement | undefined | null) => { Iif (!el) return false; const underMouse = throttledGetElementUnderMouse(); return !!underMouse && el.contains(underMouse); }; let lastCheckTime = 0; let cachedElement: Element | null = null; const THROTTLE_MS = 100; export const throttledGetElementUnderMouse = (): Element | null => { const now = performance.now(); Iif (now - lastCheckTime > THROTTLE_MS) { lastCheckTime = now; cachedElement = document.elementFromPoint(mousePosition.x, mousePosition.y); } return cachedElement; }; |