Skip to content

Commit 0e6f20a

Browse files
Merge pull request #2 from mamadou-niakate/active-link-style
detect the active navigation anchor and style it
2 parents 53017a3 + 0a41e2d commit 0e6f20a

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

src/css/main.css

+5
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,11 @@ body,
156156
text-decoration: none;
157157
}
158158

159+
.nav .nav__list .nav__item .nav__link.nav__link--active {
160+
color: #FA3;
161+
border-bottom: 2px solid #FA3;
162+
}
163+
159164
.demo {
160165
margin-top: 40px;
161166
}

src/js/components/homagePage/NavBar.js

+46-2
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,60 @@
11
import { createComponent } from '../../mini';
22

33
export function NavBar() {
4+
const removeActiveClassFromNonSelected = selected => {
5+
const navLinks = document.querySelectorAll('.nav__link');
6+
navLinks.forEach(link => {
7+
if (link !== selected) {
8+
link.classList.remove('nav__link--active');
9+
}
10+
});
11+
};
12+
13+
// style the selected nav link at the first render
14+
setImmediate(() => {
15+
// if the url doesn't contain a hash, set the first nav link as active
16+
if (!window.location.hash) {
17+
window.location.hash = document.querySelector('.nav__link').getAttribute('href');
18+
}
19+
20+
// style the initial selected nav link
21+
const selected = document.querySelector(`a[href="${window.location.hash}"]`);
22+
selected.classList.add('nav__link--active');
23+
});
24+
25+
let storedHash = window.location.hash;
26+
window.setInterval(() => {
27+
if (window.location.hash !== storedHash) {
28+
storedHash = window.location.hash;
29+
if (storedHash === '#demo') {
30+
const demoLink = document.querySelectorAll('.nav__link')[0];
31+
demoLink.classList.add('nav__link--active');
32+
removeActiveClassFromNonSelected(demoLink);
33+
}
34+
if (storedHash === '#select-game-language') {
35+
const playLink = document.querySelectorAll('.nav__link')[1];
36+
playLink.classList.add('nav__link--active');
37+
removeActiveClassFromNonSelected(playLink);
38+
}
39+
if (storedHash === '#about') {
40+
const aboutLink = document.querySelectorAll('.nav__link')[2];
41+
aboutLink.classList.add('nav__link--active');
42+
removeActiveClassFromNonSelected(aboutLink);
43+
}
44+
}
45+
window.clearInterval();
46+
}, 100);
47+
448
return createComponent({
549
render() {
650
return `
751
<nav class="nav">
852
<ul class="nav__list">
953
<li class="nav__item">
10-
<a href="#select-game-language" class="nav__link">Play</a>
54+
<a href="#demo" class="nav__link">Demo</a>
1155
</li>
1256
<li class="nav__item">
13-
<a href="#demo" class="nav__link">Demo</a>
57+
<a href="#select-game-language" class="nav__link">Play</a>
1458
</li>
1559
<li class="nav__item">
1660
<a href="#about" class="nav__link">About</a>

0 commit comments

Comments
 (0)