import { useEffect, useState } from 'react';
import { motion, useSpring, useMotionValue } from 'motion/react';
export default function MouseFollower() {
const mouseX = useMotionValue(0);
const mouseY = useMotionValue(0);
const springConfig = { damping: 25, stiffness: 150 };
const cursorX = useSpring(mouseX, springConfig);
const cursorY = useSpring(mouseY, springConfig);
const [isVisible, setIsVisible] = useState(false);
const [isMobile, setIsMobile] = useState(true);
useEffect(() => {
const checkMobile = () => {
const isTouch = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0);
setIsMobile(isTouch || window.innerWidth < 768);
};
checkMobile();
window.addEventListener('resize', checkMobile);
const handleMouseMove = (e: MouseEvent) => {
if (isMobile) return;
mouseX.set(e.clientX);
mouseY.set(e.clientY);
if (!isVisible) setIsVisible(true);
};
const handleMouseLeave = () => {
setIsVisible(false);
};
const handleMouseEnter = () => {
setIsVisible(true);
};
window.addEventListener('mousemove', handleMouseMove);
document.addEventListener('mouseleave', handleMouseLeave);
document.addEventListener('mouseenter', handleMouseEnter);
return () => {
window.removeEventListener('resize', checkMobile);
window.removeEventListener('mousemove', handleMouseMove);
document.removeEventListener('mouseleave', handleMouseLeave);
document.removeEventListener('mouseenter', handleMouseEnter);
};
}, [mouseX, mouseY, isVisible, isMobile]);
if (isMobile) return null;
return (
<>
>
);
}