|
function OffCanvas() { |
|
|
|
const offOPen = document.getElementById('offcanvas__open'); |
|
const offMenu = document.getElementById('offcanvas__menu'); |
|
const body = document.body; |
|
const offNav = document.querySelectorAll('.nav-secondary ul .menu-item'); |
|
|
|
// Open menu |
|
offOPen.addEventListener('click', function () { |
|
|
|
offMenu.classList.toggle('is-active') |
|
body.classList.toggle('overflow-y-hidden') |
|
closeSubmenu() |
|
|
|
}); |
|
|
|
// Foreach li elements to find submenu |
|
offNav.forEach(el => { |
|
if (el.classList.contains('menu-item-has-children')) { |
|
|
|
const submenuLink = el.firstChild; |
|
const submenu = submenuLink.nextElementSibling; |
|
|
|
// wrap function |
|
const wrap = (el, wrapper) => { |
|
el.parentNode.insertBefore(wrapper, el); |
|
wrapper.appendChild(el); |
|
} |
|
|
|
// create div wrapper |
|
let div = document.createElement('div'); |
|
div.classList.add('submenu__container'); |
|
|
|
// wrap ul submenu with div submenu__container |
|
wrap(submenu, div) |
|
|
|
// create span close button |
|
let createCloseBtn = document.createElement('span'); |
|
createCloseBtn.setAttribute('id', 'submenu__close'); |
|
|
|
// Add close menu |
|
submenu.before(createCloseBtn); |
|
|
|
// Click on submenu link |
|
submenuLink.addEventListener('click', function (e) { |
|
e.preventDefault() |
|
|
|
activeSubmenu(this.nextElementSibling) |
|
|
|
}) |
|
} |
|
}); |
|
|
|
// Activate submenu |
|
const activeSubmenu = (submenu) => { |
|
|
|
const textContent = submenu.previousElementSibling.textContent; |
|
const close = submenu.firstChild; |
|
|
|
let createMenuTitle = document.createElement('p'); |
|
createMenuTitle.innerText = textContent; |
|
|
|
|
|
// insert title |
|
if (!close.firstChild) { |
|
close.appendChild(createMenuTitle); |
|
} |
|
|
|
// add class to submenu |
|
submenu.classList.toggle('is-active'); |
|
|
|
} |
|
|
|
// Close OffCanvas submenu |
|
const closeSubmenu = () => { |
|
|
|
let subMenus = document.getElementsByClassName('submenu__container'); |
|
|
|
// for loop for all sub menus |
|
for (let i = 0; i < subMenus.length; i++) { |
|
|
|
// current sub menu |
|
const currentSubMenu = subMenus[i]; |
|
// current sub menu close |
|
const closeMenu = currentSubMenu.firstChild; |
|
|
|
// close event |
|
closeMenu.addEventListener('click', function (e) { |
|
e.preventDefault() |
|
|
|
currentSubMenu.classList.remove('is-active'); |
|
}); |
|
} |
|
} |
|
|
|
} |
|
|
|
export default OffCanvas |