diff options
| author | Danilo M. <danix@danix.xyz> | 2026-04-15 15:38:16 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-04-15 15:38:16 +0200 |
| commit | 5a80e9aa88cc362ce7571bd89f5f64f63fc366f4 (patch) | |
| tree | 5822c0b03a84924eb83b270130a4256ff2d38535 | |
| parent | 143fa590c48b3cecde18496e6494a1b24df55de2 (diff) | |
| download | danixxyz-5a80e9aa88cc362ce7571bd89f5f64f63fc366f4.tar.gz danixxyz-5a80e9aa88cc362ce7571bd89f5f64f63fc366f4.zip | |
feat: create hamburger menu toggle script
| -rw-r--r-- | themes/danix-xyz-hacker/assets/js/menu.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/themes/danix-xyz-hacker/assets/js/menu.js b/themes/danix-xyz-hacker/assets/js/menu.js new file mode 100644 index 0000000..257736b --- /dev/null +++ b/themes/danix-xyz-hacker/assets/js/menu.js @@ -0,0 +1,51 @@ +document.addEventListener('DOMContentLoaded', () => { + // Get the menu toggle button and overlay + const menuToggle = document.getElementById('menu-toggle'); + const menuOverlay = document.getElementById('menu-overlay'); + + /** + * Toggle menu visibility and state + */ + function toggleMenu() { + const overlay = document.getElementById('menu-overlay'); + const menuPanel = document.querySelector('[x-ref="menuPanel"]'); + + if (!overlay || !menuPanel) return; + + // Toggle overlay visibility classes + overlay.classList.toggle('opacity-0'); + overlay.classList.toggle('invisible'); + + // Toggle menu panel translation + menuPanel.classList.toggle('translate-x-full'); + + // Control body overflow + const isMenuOpen = !overlay.classList.contains('opacity-0'); + document.body.style.overflow = isMenuOpen ? 'hidden' : ''; + } + + // Toggle menu when clicking the hamburger button + if (menuToggle) { + menuToggle.addEventListener('click', toggleMenu); + } + + // Close menu when clicking on the overlay (but not the panel itself) + if (menuOverlay) { + menuOverlay.addEventListener('click', (e) => { + // Only close if clicking the overlay itself, not the menu panel + if (e.target === menuOverlay) { + toggleMenu(); + } + }); + } + + // Close menu on Escape key + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape') { + const overlay = document.getElementById('menu-overlay'); + if (overlay && !overlay.classList.contains('opacity-0')) { + toggleMenu(); + } + } + }); +}); |
