Skip to content

Commit 4a13ce1

Browse files
Create base.js
1 parent 9fb27be commit 4a13ce1

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

app/static/base.js

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Hamburger Menu Toggle
2+
document.addEventListener('DOMContentLoaded', function() {
3+
const hamburger = document.getElementById('hamburger');
4+
const navLinks = document.getElementById('navLinks');
5+
const body = document.body;
6+
7+
// Create overlay element
8+
const overlay = document.createElement('div');
9+
overlay.className = 'nav-overlay';
10+
document.body.appendChild(overlay);
11+
12+
// Toggle menu function
13+
function toggleMenu() {
14+
hamburger.classList.toggle('active');
15+
navLinks.classList.toggle('active');
16+
overlay.classList.toggle('active');
17+
body.classList.toggle('menu-open');
18+
}
19+
20+
// Hamburger click
21+
if (hamburger) {
22+
hamburger.addEventListener('click', toggleMenu);
23+
}
24+
25+
// Overlay click (close menu)
26+
overlay.addEventListener('click', function() {
27+
if (navLinks.classList.contains('active')) {
28+
toggleMenu();
29+
}
30+
});
31+
32+
// Close menu when clicking a link
33+
const navLinksItems = navLinks.querySelectorAll('a');
34+
navLinksItems.forEach(link => {
35+
link.addEventListener('click', function() {
36+
if (window.innerWidth <= 768) {
37+
toggleMenu();
38+
}
39+
});
40+
});
41+
42+
// Handle window resize
43+
let resizeTimer;
44+
window.addEventListener('resize', function() {
45+
clearTimeout(resizeTimer);
46+
resizeTimer = setTimeout(function() {
47+
if (window.innerWidth > 768) {
48+
// Reset menu state on desktop
49+
hamburger.classList.remove('active');
50+
navLinks.classList.remove('active');
51+
overlay.classList.remove('active');
52+
body.classList.remove('menu-open');
53+
}
54+
}, 250);
55+
});
56+
});

0 commit comments

Comments
 (0)