|
14 | 14 | </li> |
15 | 15 | {% endfor %} |
16 | 16 | </ul> |
| 17 | + <button class="button button--nav" aria-label="Menu toggle"> |
| 18 | + {% include icon.html id="nav" title="Menu" %} |
| 19 | + </button> |
17 | 20 | </nav> |
18 | 21 | {% else %} |
19 | 22 | {% include nav-default.html %} |
20 | 23 | {% endif %} |
21 | 24 |
|
22 | | -<template id="buttontoggle"> |
23 | | - <button class="button button--nav" aria-label="Menu toggle"> |
24 | | - {% include icon.html id="nav" title="Menu" %} |
25 | | - </button> |
26 | | -</template> |
27 | | - |
28 | 25 | <script type="text/javascript"> |
| 26 | + // Get list and button |
| 27 | + const navList = document.querySelector('.header .list--nav') |
| 28 | + const button = document.querySelector('.header .button--nav') |
| 29 | + |
| 30 | + // Hide nav and apply toggle |
| 31 | + const collapseNav = () => { |
| 32 | + if (document.body.clientWidth < 640) { |
| 33 | + navList.style.setProperty('--listHeight', `-${navList.offsetHeight}px`) |
| 34 | + } else { |
| 35 | + navList.removeAttribute('style') |
| 36 | + } |
29 | 37 |
|
30 | | -const nav = document.querySelector('.nav') |
31 | | -const buttonTemplate = document.querySelector('#buttontoggle') |
32 | | -const button = document.importNode(buttonTemplate.content, true) |
33 | | -nav.appendChild(button) |
34 | | - |
35 | | -const applyToggle = (list, button, breakpoint) => { |
36 | | - const navList = document.querySelector(list) |
37 | | - if (document.body.clientWidth < breakpoint) { |
38 | | - const navHeight = navList.clientHeight |
39 | | - const navButton = document.querySelector(button) |
40 | | - navList.style.maxHeight = '0px' |
41 | | - |
42 | | - navButton.onclick = () => { |
43 | | - if (navList.style.maxHeight == '0px') { |
44 | | - navList.style.maxHeight = `${navHeight}px` |
| 38 | + button.onclick = () => { |
| 39 | + navList.style.setProperty('transition', `margin .1s`) |
| 40 | + if (navList.style.getPropertyValue('--listHeight')) { |
| 41 | + navList.style.removeProperty('--listHeight') |
45 | 42 | } else { |
46 | | - navList.style.maxHeight = '0px' |
| 43 | + navList.style.setProperty('--listHeight', `-${navList.offsetHeight}px`) |
47 | 44 | } |
48 | 45 | } |
49 | 46 | } |
50 | | -} |
51 | 47 |
|
52 | | -applyToggle('.list--nav', '.button', 640) |
| 48 | + collapseNav() |
53 | 49 |
|
| 50 | + // Check on resize if to collapse nav |
| 51 | + window.addEventListener('resize', () => { |
| 52 | + collapseNav() |
| 53 | + }) |
54 | 54 | </script> |
0 commit comments