-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathscript.js
More file actions
94 lines (74 loc) · 2.88 KB
/
script.js
File metadata and controls
94 lines (74 loc) · 2.88 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
document.addEventListener("DOMContentLoaded", () => {
const toggle = document.getElementById("nav-toggle");
const nav = document.getElementById("nav-menu");
if (toggle && nav) {
toggle.addEventListener("click", () => nav.classList.toggle("show-menu"));
}
const navLinks = document.querySelectorAll(".nav__link");
const navMenu = document.getElementById("nav-menu");
navLinks.forEach((link) =>
link.addEventListener("click", () => navMenu?.classList.remove("show-menu"))
);
const sections = document.querySelectorAll("section[id]");
const navMenuLinks = document.querySelectorAll(".nav__menu a");
const scrollActive = () => {
const scrollY = window.pageYOffset;
sections.forEach((section) => {
const sectionTop = section.offsetTop - 50;
const sectionHeight = section.offsetHeight;
const sectionId = section.getAttribute("id");
const navLink = document.querySelector(
`.nav__menu a[href*="${sectionId}"]`
);
if (!navLink) return;
if (scrollY > sectionTop && scrollY <= sectionTop + sectionHeight) {
navLink.classList.add("active-link");
} else {
navLink.classList.remove("active-link");
}
});
};
window.addEventListener("scroll", scrollActive, { passive: true });
const scrollTopBtn = document.getElementById("scroll-top");
const toggleScrollTop = () => {
if (window.scrollY >= 200) {
scrollTopBtn?.classList.add("show-scroll");
} else {
scrollTopBtn?.classList.remove("show-scroll");
}
};
window.addEventListener("scroll", toggleScrollTop, { passive: true });
const themeButton = document.getElementById("theme-button");
const darkThemeClass = "dark-theme";
const iconThemeClass = "bx-sun";
const savedTheme = localStorage.getItem("selected-theme");
const savedIcon = localStorage.getItem("selected-icon");
const currentTheme = () =>
document.body.classList.contains(darkThemeClass) ? "dark" : "light";
const currentIcon = () =>
themeButton.classList.contains(iconThemeClass) ? "bx-moon" : "bx-sun";
if (savedTheme) {
document.body.classList[savedTheme === "dark" ? "add" : "remove"](
darkThemeClass
);
themeButton.classList[savedIcon === "bx-moon" ? "add" : "remove"](
iconThemeClass
);
}
themeButton?.addEventListener("click", () => {
document.body.classList.toggle(darkThemeClass);
themeButton.classList.toggle(iconThemeClass);
localStorage.setItem("selected-theme", currentTheme());
localStorage.setItem("selected-icon", currentIcon());
});
document.getElementById("download-button").addEventListener("click", () => {
const cvUrl = "/assets/CV.pdf";
window.open(cvUrl, "_blank");
const link = document.createElement("a");
link.href = cvUrl;
link.download = "CV.pdf";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
});
});