diff --git a/hifi-src/src/components/Navbar.jsx b/hifi-src/src/components/Navbar.jsx index d13883e..6f19163 100644 --- a/hifi-src/src/components/Navbar.jsx +++ b/hifi-src/src/components/Navbar.jsx @@ -25,8 +25,18 @@ export default function Navbar() { useEffect(() => { if (open) { setMounted(true); - const id = requestAnimationFrame(() => setMenuVisible(true)); - return () => cancelAnimationFrame(id); + // Doppeltes rAF: nach dem Mounten braucht der Browser einen echten Paint mit der + // "versteckten" Ausgangsposition, bevor wir auf "sichtbar" umschalten - sonst + // fasst er beide Zustandsänderungen in einem Frame zusammen und es gibt keinen + // sichtbaren Übergang (kein Fade-in). + let rafInner; + const rafOuter = requestAnimationFrame(() => { + rafInner = requestAnimationFrame(() => setMenuVisible(true)); + }); + return () => { + cancelAnimationFrame(rafOuter); + if (rafInner) cancelAnimationFrame(rafInner); + }; } setMenuVisible(false); const closeDuration = FLY_DURATION_MS + (totalItems - 1) * ITEM_DELAY_MS; @@ -110,18 +120,18 @@ export default function Navbar() { {mounted && createPortal(
setOpen(false)} className={`text-3xl font-extrabold tracking-tight text-neutral-900 hover:text-brand-600 ${flyIn()}`} style={flyInStyle(0)}> @@ -141,8 +151,8 @@ export default function Navbar() { {phone && ( - {phone} + {phone} )} {whatsapp && ( @@ -153,8 +163,8 @@ export default function Navbar() { className={`flex items-center gap-2 text-sm font-semibold uppercase tracking-wide text-neutral-600 hover:text-brand-600 ${flyIn()}`} style={flyInStyle(6)} > - WhatsApp + WhatsApp )} - Zum Shop + Zum Shop
, document.body