Как сделать выпадающее меню при наведении, а закрытие только по клику?

Два выпадающих меню, одно мега меню второе списком, оба с одним классом .sub-menu.
Нужно чтобы мега меню, которое открывается при наведении, не закрывалось при перемещении курсора и можно было бы закрыть только по клику на кнопку, которая вне меню.

С помощью js определил только первый класс .sub-menu, не знаю как повесить закрытие на кнопку.

JS:

const listItems = document.querySelectorAll('.sub-menu'); //берем все .sub-menu
listItems.forEach(item=>{ //итерируем
       if(item.querySelectorAll('.sub-menu').length) { //если в sub-menu нет других sub-menu
           item.classList.add("visible") //присваиваем класс
    }
})
  • Вопрос задан
  • 597 просмотров
Пригласить эксперта
Ответы на вопрос 1
@romant094
Frontend-developer
onMouseEnter => открыть меню
onClick на документе, исключая сам дропдаун => закрыть меню

С onMouseEnter, думаю, все понятно.
const menuItems = document.querySelectorAll('.menu-item')
document.addEventListener('click', (e) => {
  event.stopPropagation() // это надо, чтобы прекратить распространение события
  if (!menuItems.includes(e.target)) {
    // close dropdown
  }
})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы