@@ -5,28 +5,27 @@ import { MenuIcon, X } from "lucide-react";
55---
66
77<style >
8- .menu-overlay {
9- display: none ;
10- position: fixed ;
11- inset: 0 ;
12- background-color: rgb(255, 255, 255) ;
13- z-index: 9999 ;
14- overflow-y: auto ;
15- opacity: 0 ;
16- transition: opacity 0.3s ease-in-out;
17- }
8+ .menu-overlay {
9+ visibility: hidden ;
10+ opacity: 0 ;
11+ position: fixed ;
12+ inset: 0 ;
13+ background-color: rgb(255, 255, 255) ;
14+ z-index: 9999 ;
15+ overflow-y: auto ;
16+ transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out;
17+ }
1818
19- @media (prefers-color-scheme: dark) {
20- .menu-overlay {
21- background-color: rgb(9, 9, 11);
22- }
19+ @media (prefers-color-scheme: dark) {
20+ .menu-overlay {
21+ background-color: rgb(9, 9, 11);
2322 }
23+ }
2424
25- .menu-overlay.active {
26- display: flex;
27- flex-direction: column;
28- opacity: 1;
29- }
25+ .menu-overlay.active {
26+ visibility: visible;
27+ opacity: 1;
28+ }
3029
3130 .menu-content {
3231 padding: 2rem;
@@ -118,27 +117,43 @@ import { MenuIcon, X } from "lucide-react";
118117</div >
119118
120119<script is:inline >
121- function toggleMenu() {
120+ function initializeMenuToggle() {
121+ const menuToggleButton = document.querySelector("#menu-toggle button");
122+ const closeMenuButton = document.getElementById('close-menu');
122123 const menuOverlay = document.querySelector('.menu-overlay');
123- if (menuOverlay) {
124- menuOverlay.classList.toggle('active');
125- document.body.style.overflow = menuOverlay.classList.contains('active') ? 'hidden' : '';
124+
125+ function toggleMenu() {
126+ if (menuOverlay) {
127+ menuOverlay.classList.toggle('active');
128+ document.body.style.overflow = menuOverlay.classList.contains('active') ? 'hidden' : 'auto';
129+ }
126130 }
127- }
128131
129- document.getElementById('menu-toggle')?.addEventListener('click', toggleMenu);
130- document.getElementById('close-menu')?.addEventListener('click', toggleMenu);
132+ if (menuToggleButton) {
133+ menuToggleButton.addEventListener('click', toggleMenu);
134+ }
135+ if (closeMenuButton) {
136+ closeMenuButton.addEventListener('click', toggleMenu);
137+ }
131138
132- document.querySelectorAll('.menu-overlay a').forEach(link => {
133- link.addEventListener('click', toggleMenu);
134- });
139+ document.querySelectorAll('.menu-overlay a').forEach(link => {
140+ link.addEventListener('click', () => {
141+ if (menuOverlay.classList.contains('active')) {
142+ toggleMenu();
143+ }
144+ });
145+ });
135146
136- document.addEventListener('keydown', (e) => {
137- if (e.key === 'Escape') {
138- const menuOverlay = document.querySelector('.menu-overlay');
139- if (menuOverlay?.classList.contains('active')) {
147+ document.addEventListener('keydown', (e) => {
148+ if (e.key === 'Escape' && menuOverlay.classList.contains('active')) {
140149 toggleMenu();
141150 }
142- }
143- });
151+ });
152+ }
153+
154+ // Initialize on initial page load
155+ document.addEventListener("DOMContentLoaded", initializeMenuToggle);
156+
157+ // Re-initialize on page navigation using Astro's after-swap event
158+ document.addEventListener("astro:after-swap", initializeMenuToggle);
144159</script >
0 commit comments