useMousePosition
hookas/use-mouse-positionFreeHook
A hook to track the mouse position
Install it
npx shadcn@latest add https://hookas.letstri.dev/r/use-mouse-position.jsonSource
1'use client'23import * as React from 'react'45export function useMousePosition<T extends Element>(element?: T) {6 const [position, setPosition] = React.useState({ x: 0, y: 0 })78 React.useEffect(() => {9 const targetElement = element ?? document10 const abortController = new AbortController()1112 targetElement.addEventListener('mousemove', (event) => {13 const mouseEvent = event as MouseEvent14 const rect = (mouseEvent.currentTarget as HTMLElement)?.getBoundingClientRect()15 const x = Math.max(0, Math.round(mouseEvent.pageX - rect.left - window.scrollX))16 const y = Math.max(0, Math.round(mouseEvent.pageY - rect.top - window.scrollY))1718 setPosition({ x, y })19 }, { signal: abortController.signal })2021 return () => {22 abortController.abort()23 }24 }, [element])2526 return position27}
Files it writes
More from hookas
All 30 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| useAsyncEffectuse-async-effect | hookas | Hooks | Free | no deps | |
| useClickOutsideuse-click-outside | hookas | Hooks | Free | no deps | |
| useDebounceCallbackuse-debounced-callback | hookas | Hooks | Free | no deps | |
| useDebounceMemouse-debounced-memo | hookas | Hooks | Free | no deps | |
| useDebounceStateuse-debounced-state | hookas | Hooks | Free | no deps | |
| useElementSizeuse-element-size | hookas | Hooks | Free | no deps | |
| useFullscreenuse-fullscreen | hookas | Hooks | Free | no deps | |
| useIntervaluse-interval | hookas | Hooks | Free | no deps |
