mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2026-05-23 10:00:55 +00:00
70 lines
2.1 KiB
JavaScript
70 lines
2.1 KiB
JavaScript
// Hamburger menu toggle functionality
|
|
(function() {
|
|
'use strict';
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const hamburgerToggle = document.getElementById('hamburger-toggle');
|
|
const mobileMenuDrawer = document.getElementById('mobile-menu-drawer');
|
|
const mobileMenuOverlay = document.getElementById('mobile-menu-overlay');
|
|
|
|
if (!hamburgerToggle || !mobileMenuDrawer || !mobileMenuOverlay) {
|
|
return;
|
|
}
|
|
|
|
function openMenu() {
|
|
hamburgerToggle.classList.add('active');
|
|
mobileMenuDrawer.classList.add('active');
|
|
mobileMenuOverlay.classList.add('active');
|
|
document.body.style.overflow = 'hidden';
|
|
}
|
|
|
|
function closeMenu() {
|
|
hamburgerToggle.classList.remove('active');
|
|
mobileMenuDrawer.classList.remove('active');
|
|
mobileMenuOverlay.classList.remove('active');
|
|
document.body.style.overflow = '';
|
|
}
|
|
|
|
function toggleMenu() {
|
|
if (mobileMenuDrawer.classList.contains('active')) {
|
|
closeMenu();
|
|
} else {
|
|
openMenu();
|
|
}
|
|
}
|
|
|
|
// Toggle menu on hamburger click
|
|
hamburgerToggle.addEventListener('click', function(e) {
|
|
e.stopPropagation();
|
|
toggleMenu();
|
|
});
|
|
|
|
// Close menu when clicking overlay
|
|
mobileMenuOverlay.addEventListener('click', closeMenu);
|
|
|
|
// Close menu when clicking a menu item
|
|
const menuItems = mobileMenuDrawer.querySelectorAll('.mobile-menu-items a');
|
|
menuItems.forEach(function(item) {
|
|
item.addEventListener('click', closeMenu);
|
|
});
|
|
|
|
// Close menu on escape key
|
|
document.addEventListener('keydown', function(e) {
|
|
if (e.key === 'Escape' && mobileMenuDrawer.classList.contains('active')) {
|
|
closeMenu();
|
|
}
|
|
});
|
|
|
|
// Close menu when window is resized above mobile breakpoint
|
|
let resizeTimer;
|
|
window.addEventListener('resize', function() {
|
|
clearTimeout(resizeTimer);
|
|
resizeTimer = setTimeout(function() {
|
|
if (window.innerWidth > 768 && mobileMenuDrawer.classList.contains('active')) {
|
|
closeMenu();
|
|
}
|
|
}, 250);
|
|
});
|
|
});
|
|
})();
|