Repository navigation
Expand file tree
/
Copy pathscript.js
More file actions
74 lines (63 loc) · 1.81 KB
/
Copy pathscript.js
File metadata and controls
74 lines (63 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const navToggle = document.querySelector('.nav-toggle');
const siteNav = document.querySelector('.site-nav');
const yearEl = document.getElementById('year');
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
function setYear() {
if (yearEl) {
yearEl.textContent = new Date().getFullYear();
}
}
function closeNav() {
if (siteNav) {
siteNav.dataset.open = 'false';
navToggle?.setAttribute('aria-expanded', 'false');
}
}
function openNav() {
if (siteNav) {
siteNav.dataset.open = 'true';
navToggle?.setAttribute('aria-expanded', 'true');
}
}
function toggleNav() {
if (!siteNav) return;
const isOpen = siteNav.dataset.open === 'true';
if (isOpen) {
closeNav();
} else {
openNav();
}
}
function handleResize() {
if (!siteNav) return;
if (window.innerWidth > 768) {
openNav();
} else {
closeNav();
}
}
function initSmoothScroll() {
const links = document.querySelectorAll('a[href^="#"]');
links.forEach((link) => {
link.addEventListener('click', (event) => {
const targetId = link.getAttribute('href');
if (!targetId || targetId === '#') return;
const target = document.querySelector(targetId);
if (!target) return;
event.preventDefault();
if (!prefersReducedMotion) {
target.scrollIntoView({ behavior: 'smooth' });
} else {
target.scrollIntoView();
}
if (link.closest('.site-nav') && window.innerWidth <= 768) {
closeNav();
}
});
});
}
navToggle?.addEventListener('click', toggleNav);
window.addEventListener('resize', handleResize);
handleResize();
setYear();
initSmoothScroll();