@supunlakmal/hooks
Version:
A collection of reusable React hooks
41 lines • 1.41 kB
JavaScript
import { useState, useEffect } from 'react';
const initialState = {
x: null,
y: null,
screenX: null,
screenY: null,
pageX: null,
pageY: null,
};
/**
* Custom hook to track the current position of the mouse pointer.
*
* @returns An object containing the mouse coordinates (relative to viewport, screen, and page).
*/
export function useMousePosition() {
const [mousePosition, setMousePosition] = useState(initialState);
useEffect(() => {
if (typeof window === 'undefined') {
return; // Don't run on server
}
const handleMouseMove = (event) => {
setMousePosition({
x: event.clientX,
y: event.clientY,
screenX: event.screenX,
screenY: event.screenY,
pageX: event.pageX,
pageY: event.pageY,
});
};
window.addEventListener('mousemove', handleMouseMove);
// Initial state check (in case mouse is already over the window before mount)
// Note: This won't capture position if the mouse isn't moved after mount.
// Consider alternative strategies if initial position without movement is critical.
return () => {
window.removeEventListener('mousemove', handleMouseMove);
};
}, []);
return mousePosition;
}
//# sourceMappingURL=useMousePosition.js.map