-
-
Notifications
You must be signed in to change notification settings - Fork 792
/
Copy pathhamburger-nav.js
60 lines (40 loc) · 1.73 KB
/
hamburger-nav.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
---
title: hamburger nav file
---
// Retrieve the SVG element
const svgElement = document.querySelector('#burgerImage svg');
// Get the id of the button
const buttonId = 'burgerImage';
// Set the aria-labelledby attribute on the SVG element
svgElement.setAttribute('aria-labelledby', buttonId);
//Retrieve svg string from _includes
const burgerImage = `{% include svg/icon-hamburger-nav.svg %}`;
const burgerImageX = `{% include svg/icon-hamburger-nav-x.svg %}`;
const burgerButton = document.querySelector('#burgerImage');
document.querySelector('#burgerImage').addEventListener('click',toggleNavDisplay);
window.addEventListener('resize', resetNavBarPropsToDefaultState);
function toggleNavDisplay(){
const headerNav = document.querySelector('#headerNav');
swapIcons(this.firstElementChild.id);
headerNav.style.display == 'flex'
? (headerNav.style.display = 'none', burgerButton.setAttribute('aria-expanded', 'false'))
: (headerNav.style.display = 'flex', burgerButton.setAttribute('aria-expanded', 'true'));
}
function swapIcons(icon_id){
//Create dictionary for swap
const hamburger = {
'hamburger-nav': {"el":burgerImage,'opposite':burgerImageX},
'hamburger-nav-x':{'el':burgerImageX,'opposite':burgerImage}
}
//remove existing icon
document.querySelector(`#${icon_id}`).remove();
//insert opposite icon
document.querySelector(`#burgerImage`).insertAdjacentHTML('afterbegin',hamburger[icon_id].opposite);
}
function resetNavBarPropsToDefaultState(){
if(document.body.clientWidth>767){
document.querySelector('#headerNav').removeAttribute("style");
document.querySelector(`#burgerImage`).firstElementChild.remove();
document.querySelector(`#burgerImage`).insertAdjacentHTML('afterbegin',burgerImage);
}
}