"use client"; import { useRef, useEffect, FC, useState } from "react"; import gsap from "gsap"; const GSAPCursor: FC = () => { const cursorRef = useRef(null); const [position, setPosition] = useState({ x: 0, y: 0 }); const [isHoveringLink, setIsHoveringLink] = useState(false); // For touch devices, return null if (typeof window !== "undefined" && "ontouchstart" in window) return null; useEffect(() => { // Initialize GSAP animation let xTo = gsap.quickTo(cursorRef.current, "x", { duration: 2, ease: "power2.out", }); let yTo = gsap.quickTo(cursorRef.current, "y", { duration: 2, ease: "power2.out", }); const onMouseMove = (e: MouseEvent) => { xTo(e.clientX); yTo(e.clientY); }; window.addEventListener("mousemove", onMouseMove); const handleMouseOver = () => setIsHoveringLink(true); const handleMouseOut = () => setIsHoveringLink(false); const links = document.querySelectorAll('a'); links.forEach(link => { link.addEventListener('mouseover', handleMouseOver); link.addEventListener('mouseout', handleMouseOut); }); return () => { links.forEach(link => { link.removeEventListener('mouseover', handleMouseOver); link.removeEventListener('mouseout', handleMouseOut); }); window.removeEventListener("mousemove", onMouseMove); }; }, []); useEffect(() => { const handleMouseMove = (e: MouseEvent) => { setPosition({ x: e.clientX, y: e.clientY }); }; window.addEventListener("mousemove", handleMouseMove); return () => window.removeEventListener("mousemove", handleMouseMove); }, []); return (
); }; export default GSAPCursor;