From 28ded7faae4f9db13da91280aac7760644c36c9c Mon Sep 17 00:00:00 2001 From: qcigano Date: Mon, 3 Aug 2026 17:37:51 +0200 Subject: [PATCH] =?UTF-8?q?Sprach-=20und=20Konto-Dropdown=20=C3=B6ffnen=20?= =?UTF-8?q?jetzt=20automatisch=20beim=20Dr=C3=BCberfahren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bisher musste man auf "Deutsch ▾" bzw. das Konto-Menü in der Kopfzeile klicken, damit sich das Untermenü öffnet. Jetzt reicht auf dem Desktop einfaches Drüberfahren mit der Maus (mit kurzer Schließverzögerung beim Verlassen, damit der Wechsel vom Button zum Menü nicht sofort wieder zuklappt) — Klick funktioniert als Fallback für Touch-Geräte/Tastatur weiterhin ganz normal. Co-Authored-By: Claude Sonnet 5 --- src/components/LanguageSwitcher.astro | 22 ++++++++++++++++++++++ src/layouts/Layout.astro | 17 +++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/components/LanguageSwitcher.astro b/src/components/LanguageSwitcher.astro index fdd5768..2d9b157 100644 --- a/src/components/LanguageSwitcher.astro +++ b/src/components/LanguageSwitcher.astro @@ -79,6 +79,28 @@ function globeStyle(l: Locale) { el.classList.toggle("open"); btn.setAttribute("aria-expanded", el.classList.contains("open") ? "true" : "false"); }); + + // Öffnet zusätzlich automatisch beim Drüberfahren mit der Maus (Desktop) — kein Klick mehr + // nötig. Kurze Schließverzögerung beim Verlassen, damit der Wechsel von Button zu Menü nicht + // sofort wieder zuklappt. Klick bleibt als Fallback für Touch-Geräte/Tastatur erhalten. + let closeTimer: ReturnType | null = null; + el.addEventListener("mouseenter", () => { + if (closeTimer) { clearTimeout(closeTimer); closeTimer = null; } + document.querySelectorAll(".lang-switch.open").forEach((other) => { + if (other !== el) { + other.classList.remove("open"); + other.querySelector(".lang-switch-btn")?.setAttribute("aria-expanded", "false"); + } + }); + el.classList.add("open"); + btn?.setAttribute("aria-expanded", "true"); + }); + el.addEventListener("mouseleave", () => { + closeTimer = setTimeout(() => { + el.classList.remove("open"); + btn?.setAttribute("aria-expanded", "false"); + }, 200); + }); }); document.addEventListener("click", () => { document.querySelectorAll(".lang-switch.open").forEach((el) => el.classList.remove("open")); diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 6cf32da..34b6c67 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -227,6 +227,23 @@ const p = (href: string) => `${localePrefix(lang)}${href}`; const open = menu?.classList.toggle("open"); menuBtn.setAttribute("aria-expanded", open ? "true" : "false"); }); + + // Öffnet zusätzlich automatisch beim Drüberfahren mit der Maus (Desktop) — kein Klick mehr + // nötig. Kurze Schließverzögerung beim Verlassen, damit der Wechsel von Button zu Menü nicht + // sofort wieder zuklappt. Klick bleibt als Fallback für Touch-Geräte/Tastatur erhalten. + let accountCloseTimer: ReturnType | null = null; + menu?.addEventListener("mouseenter", () => { + if (accountCloseTimer) { clearTimeout(accountCloseTimer); accountCloseTimer = null; } + menu.classList.add("open"); + menuBtn?.setAttribute("aria-expanded", "true"); + }); + menu?.addEventListener("mouseleave", () => { + accountCloseTimer = setTimeout(() => { + menu.classList.remove("open"); + menuBtn?.setAttribute("aria-expanded", "false"); + }, 200); + }); + document.addEventListener("click", () => { menu?.classList.remove("open"); menuBtn?.setAttribute("aria-expanded", "false");