Skip to content

Instantly share code, notes, and snippets.

@jtrefry
Last active January 29, 2024 16:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jtrefry/02f5a8611bae4df1ed4749391be22fa5 to your computer and use it in GitHub Desktop.
Save jtrefry/02f5a8611bae4df1ed4749391be22fa5 to your computer and use it in GitHub Desktop.
Mouse Events
import { useEffect, useState } from 'react';
const useMouseEvents = () => {
const [overlayStyles, setOverlayStyles] = useState<React.CSSProperties>({
display: 'none',
position: 'fixed',
backgroundColor: 'rgba(255, 255, 255, 0.9)',
padding: '10px',
border: '1px solid black',
zIndex: 9999,
});
const [overlayContent, setOverlayContent] = useState<string>('');
useEffect(() => {
const handleMouseEnter = (e: MouseEvent) => {
const target = e.target as HTMLElement;
const { padding, margin } = window.getComputedStyle(target);
setOverlayStyles(prevStyles => ({
...prevStyles,
display: 'block',
top: `${target.offsetTop}px`,
left: `${target.offsetLeft}px`,
}));
setOverlayContent(`
Padding: ${padding}
Margin: ${margin}
`);
};
const handleMouseLeave = () => {
setOverlayStyles(prevStyles => ({
...prevStyles,
display: 'none',
}));
};
const elements = document.querySelectorAll('*');
elements.forEach(element => {
element.addEventListener('mouseenter', handleMouseEnter);
element.addEventListener('mouseleave', handleMouseLeave);
});
return () => {
elements.forEach(element => {
element.removeEventListener('mouseenter', handleMouseEnter);
element.removeEventListener('mouseleave', handleMouseLeave);
});
};
}, []); // Run effect only once on component mount
return { overlayStyles, overlayContent };
};
export default useMouseEvents;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment