|
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