diff --git a/web/src/app/blogs/BlogsClient.tsx b/web/src/app/blogs/BlogsClient.tsx index 85076a0..6d52831 100644 --- a/web/src/app/blogs/BlogsClient.tsx +++ b/web/src/app/blogs/BlogsClient.tsx @@ -100,10 +100,7 @@ export default function BlogsClient({ /> {/* Blogs Grid */} -
+
{filteredBlogs.map((blog) => ( { - const cardRef = useRef(null); - - const glowRef = useRef(null); - - useEffect(() => { - const card = cardRef.current; - - const glow = glowRef.current; - - if (!card || !glow) return; - - const handleMouseMove = (e: MouseEvent) => { - const rect = card.getBoundingClientRect(); - - const x = e.clientX - rect.left; - - const y = e.clientY - rect.top; - - const rotateX = (y / rect.height - 0.5) * -10; - - const rotateY = (x / rect.width - 0.5) * 10; - - // Card tilt - gsap.to(card, { - rotateX, - rotateY, - duration: 0.4, - ease: 'power2.out', - transformPerspective: 1000, - }); - - // Glow follows mouse exactly - gsap.to(glow, { - x, - y, - duration: 0.25, - ease: 'power3.out', - }); - }; - - const handleMouseEnter = () => { - gsap.to(glow, { - opacity: 0.12, - scale: 1, - duration: 0.3, - }); - }; - - const handleMouseLeave = () => { - gsap.to(card, { - rotateX: 0, - rotateY: 0, - duration: 0.5, - ease: 'power2.out', - }); - - gsap.to(glow, { - opacity: 0, - scale: 0.8, - duration: 0.4, - ease: 'power2.out', - }); - }; - - card.addEventListener('mousemove', handleMouseMove); - - card.addEventListener('mouseenter', handleMouseEnter); - - card.addEventListener('mouseleave', handleMouseLeave); - - return () => { - card.removeEventListener('mousemove', handleMouseMove); - - card.removeEventListener('mouseenter', handleMouseEnter); - - card.removeEventListener('mouseleave', handleMouseLeave); - }; - }, []); - return ( - +
- {/* Moving Glow Ball */} -
-
{category}