-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
139 lines (78 loc) · 2.65 KB
/
app.js
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
* Define Global Variables
*
*/
// Navbar list global variable
const navbarList = document.getElementById("navbar__list");
// Sections global variable
const sections = document.querySelectorAll("section");
/**
* End Global Variables
* Start Helper Functions
*
*/
/**
* End Helper Functions
* Begin Main Functions
*
*/
// Build the nav
const navItems = ["Section 1", "Section 2", "Section 3", "Section 4"];
// This function builds the navigation menu
function buildNavigationMenu() {
navbarList.innerHTML="";
// Loop over navItems
navItems.forEach((item, index) => {
const listItem = document.createElement("li");
const anchor = document.createElement("a");
// Placeholder for the "li" link
anchor.href = "#";
// Sets the text content of the anchor to match the items within the navItem array
anchor.textContent = item;
// Adds the anchor tag to the list item
listItem.appendChild(anchor);
// Append all elements to the navBarItems
navbarList.appendChild(listItem);
// Attach click event listener to each anchor
anchor.addEventListener("click", function(event) {
event.preventDefault();
// Generate section ID based on index
const sectionId = `section${index + 1}`;
// Scroll to the section
const section = document.getElementById(sectionId);
if(section) {
section.scrollIntoView({behavior: "smooth", block: "center"});
}
});
});
}
// Add class 'active' to section when near top of viewport
function setActiveSection() {
sections.forEach((section, index) => {
// Get position information of the element section
const bounding = section.getBoundingClientRect();
// Get a specific navItem based of its index
const navItem = document.querySelectorAll("#navbar__list li")[index];
if(bounding.top >= 0 && bounding.bottom <= window.innerHeight) {
section.classList.add("active");
navItem.classList.add("active");
// For mobile screens
} else if(bounding.top < 0 && bounding.bottom > window.innerHeight) {
section.classList.add("active");
navItem.classList.add("active");
} else {
section.classList.remove("active");
navItem.classList.remove("active");
}
});
}
buildNavigationMenu();
// Scroll to anchor ID using scrollTO event
/**
* End Main Functions
* Begin Events
*
*/
// Listen for scroll event and update active section based on scroll
window.addEventListener("scroll", setActiveSection);
//* End Events