Javascript два прослушивателя событий конфликтуют между собой

Привет, у меня есть слушатель envent в моем гамбургере меню, который открывает и закрывает мою полноэкранную навигацию. В полноэкранном режиме я могу открывать и закрывать меню, нажимая на бургер.

В качестве второго шага я попытался реализовать дополнительную функциональность, целью которой должно быть закрытие моей полноэкранной навигации независимо от того, где пользователь щелкает. Однако это работает, пока пользователь щелкает элемент моей навигации или пустую область окна просмотра, но не работает, если пользователь щелкает бюргера. Вот мой код вместе с кодовой ручкой. Любая помощь приветствуется.

HTML 
 <header>
        <nav class = "navbar">
            <div class = "logo">
                <a href = "#">Logo</a>
            </div>
            <ul class = "navbar__menu">
                <li class = "navbar__menu-item"><a href = "#home">Home</a></li>
                <li class = "navbar__menu-item"><a href = "#about">About</a></li>
                <li class = "navbar__menu-item"><a href = "#services">Services</a></li>
                <li class = "navbar__menu-item"><a href = "#">Plans</a></li>
                  <li class = "navbar__menu-item"><a href = "#">Team</a></li>
                <li class = "navbar__menu-item"><a href = "#">Contact Us</a> </li>
            </ul>
            <div class = "navbar__toggler">
                <div class = "navbar__toggler-burger"></div>
            </div>
        </nav>
    </header>

ЯВАСКРИПТ

window.addEventListener("scroll", function () {
  const navbar = document.querySelector(".navbar");
  navbar.classList.toggle("sticky", window.scrollY > 0);
});

const navToggler = document.querySelector(".navbar__toggler");
const navTogglerBurger = document.querySelector(".navbar__toggler-burger");
const navBar = document.querySelector(".navbar__menu");

navToggler.addEventListener("click", () => {
  navTogglerBurger.classList.toggle("open");
  navBar.classList.toggle("open");
  document.querySelectorAll(".navbar__menu-item").forEach((el) => {
    el.addEventListener("click", () => {
      navBar.classList.remove("open");
      navTogglerBurger.classList.remove("open");
    });
  });
});

document.addEventListener('mouseup', () => {
   navBar.classList.remove("open");
   navTogglerBurger.classList.remove("open");
})




КодПен: https://codepen.io/Helye23/pen/RwGpoZM

используйте логическое значение, например isMenuOpen, и добавьте прослушиватель событий клика на гамбургер, который проверяет, открыто ли меню или нет, и если это так, скройте меню

user14018874 15.12.2020 02:50

Спасибо, но я хотел бы узнать, почему, когда я добавляю прослушиватель событий в документ (второй прослушиватель событий в моем фрагменте), первый перестает работать. Просто чтобы я мог понять

Emmanuel 15.12.2020 10:03

Моя ошибка заключалась в том, что я поместил второй даже прослушиватель на сам документ, а не просто добавил его в область навигации, порт просмотра которой установлен на 100%. вот как я изменил свой код: mouseup", () => { navTogglerBurger.classList.remove("open"); navBar.classList.remove("active"); }); }) ```

Emmanuel 15.12.2020 10:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
342
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Моя ошибка заключалась в том, что я поместил второй даже прослушиватель на сам документ, а не просто добавил его в область навигации, порт просмотра которой установлен на 100%. вот как я изменил свой код:

// ! Adding an event listenter to the burger so that it can transform into an X and open the menu
navToggler.addEventListener('click', () => {
  navTogglerBurger.classList.toggle("open");
  navBar.classList.toggle("active");
// ! Adding an event listenter to the entire menu so that wherever the user clicks both the burger and the menu can be closed 
  navBar.addEventListener("mouseup", () => {
    navTogglerBurger.classList.remove("open");
    navBar.classList.remove("active");
  });
})


// ! 

Другие вопросы по теме