1.8 KiB
1.8 KiB
name, description, type
| name | description | type |
|---|---|---|
| Custom Cursor Feature Implementation | Custom cursor with hug behavior and click bounce animations using GSAP | project |
Feature: Custom cursor with smooth tracking, element hug behavior, and click animations
Implementation details:
- Component:
/frontend/src/components/CustomCursor.tsx— "use client" component - Styling: CSS rules added to
/frontend/src/app/globals.css - Layout integration: Loaded via
next/dynamicwithssr: falsein/frontend/src/app/layout.tsx
How it works:
- 35px white donut ring cursor (white fill + 2px outline with 1px gap)
- Smooth tracking with
gsap.quickTo(0.15s duration, power2.out easing) - Device detection: requires
(pointer: fine)andprefers-reduced-motion: no-preference - Event delegation (no DOM caching) — uses
closest('[data-cursor="hug"]')for element detection
Hug behavior (on elements with data-cursor="hug"):
- Element with transparent background: cursor fills element (opacity 0.15 as fill), applies blue glow to element
- Element with visible background: cursor becomes oversized glow border around element
- Both: scale element to 1.05 during hover, restore on leave
- All animations use GSAP timelines (0.3s duration, power3.out easing)
Click bounce:
mousedown: scale 0.95 (0.1s, power2.in)mouseup: scale 1.08 (0.15s, back.out(2)), then scale 1.05 (0.3s, power2.out)
Elements with hug behavior (data-cursor="hug" added to):
- HeroSection: both CTA links
- Navbar: desktop nav links + desktop "Contattaci" button (NOT mobile menu)
- CtaSection: "Contattaci" button
- contatti/page.tsx: phone number and email links (prominent ones only)
Styling rules:
- Native cursor hidden on desktop via media query (pointer: fine)
.cursor-huggedclass appliesbox-shadow: 0 0 25px rgba(0, 1, 187, 0.25)during hug state