Add mobile menu outside/escape close and sticky header scrolled state
This commit is contained in:
parent
733f67fb41
commit
8874c0e54a
1 changed files with 28 additions and 2 deletions
|
|
@ -3,6 +3,11 @@
|
||||||
const nav = document.getElementById('siteNav');
|
const nav = document.getElementById('siteNav');
|
||||||
|
|
||||||
if (toggle && nav) {
|
if (toggle && nav) {
|
||||||
|
const closeMenu = () => {
|
||||||
|
toggle.setAttribute('aria-expanded', 'false');
|
||||||
|
nav.classList.remove('open');
|
||||||
|
};
|
||||||
|
|
||||||
toggle.addEventListener('click', () => {
|
toggle.addEventListener('click', () => {
|
||||||
const expanded = toggle.getAttribute('aria-expanded') === 'true';
|
const expanded = toggle.getAttribute('aria-expanded') === 'true';
|
||||||
toggle.setAttribute('aria-expanded', String(!expanded));
|
toggle.setAttribute('aria-expanded', String(!expanded));
|
||||||
|
|
@ -11,10 +16,31 @@
|
||||||
|
|
||||||
nav.querySelectorAll('a').forEach((link) => {
|
nav.querySelectorAll('a').forEach((link) => {
|
||||||
link.addEventListener('click', () => {
|
link.addEventListener('click', () => {
|
||||||
toggle.setAttribute('aria-expanded', 'false');
|
closeMenu();
|
||||||
nav.classList.remove('open');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.addEventListener('click', (event) => {
|
||||||
|
if (!nav.classList.contains('open')) return;
|
||||||
|
if (nav.contains(event.target) || toggle.contains(event.target)) return;
|
||||||
|
closeMenu();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('keydown', (event) => {
|
||||||
|
if (event.key === 'Escape' && nav.classList.contains('open')) {
|
||||||
|
closeMenu();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const siteHeader = document.getElementById('siteHeader');
|
||||||
|
if (siteHeader) {
|
||||||
|
const syncScrolledState = () => {
|
||||||
|
siteHeader.classList.toggle('is-scrolled', window.scrollY > 8);
|
||||||
|
};
|
||||||
|
|
||||||
|
syncScrolledState();
|
||||||
|
window.addEventListener('scroll', syncScrolledState, { passive: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
const reveals = document.querySelectorAll('[data-reveal]');
|
const reveals = document.querySelectorAll('[data-reveal]');
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue