Files
misode.github.io/src/app/hooks/useOnHover.ts
2021-06-26 17:18:02 +02:00

22 lines
602 B
TypeScript

import { useEffect } from 'preact/hooks'
export function useOnHover(element: HTMLElement, hover: (x: number | undefined, y: number | undefined) => unknown) {
if (!element) return
const onMouseMove = (e: MouseEvent) => {
hover(e.offsetX, e.offsetY)
}
const onMouseLeave = () => {
hover(undefined, undefined)
}
useEffect(() => {
element.addEventListener('mousemove', onMouseMove)
element.addEventListener('mouseleave', onMouseLeave)
return () => {
element.removeEventListener('mousemove', onMouseMove)
element.removeEventListener('mouseleave', onMouseLeave)
}
}, [element])
}