简体   繁体   English

Javascript 两个事件侦听器之间发生冲突

[英]Javascript two event listeners conflicting between them

Hi I have an envent listener on my menu burger which opens and closes my full screen navigation.嗨,我的菜单汉堡上有一个事件监听器,它可以打开和关闭我的全屏导航。 When in full screen I can open and close the menu by clicking on the burger.全屏时,我可以通过单击汉堡来打开和关闭菜单。

As a second step I have tried to implement a further functionality whose goal should be to close my full screen navigation no matter where the user clicks.作为第二步,我尝试实现进一步的功能,其目标应该是关闭我的全屏导航,无论用户点击哪里。 However, this works as long as the user click on an item of my navigation or an empty area of the view port but it doesn't work if the user clicks the burgher.但是,只要用户单击我的导航项或视口的空白区域,这就会起作用,但如果用户单击 burgher,它就不起作用。 Here's my code along with a code pen.这是我的代码和代码笔。 Any help is greatly appreciated.任何帮助是极大的赞赏。

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>

JAVASCRIPT JAVASCRIPT

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");
})




CodePen: https://codepen.io/Helye23/pen/RwGpoZM代码笔: https://codepen.io/Helye23/pen/RwGpoZM

My mistake was that I was putting the second evenlistener on the document itself instead of simply adding it to navigation area whose view port is set to 100%.我的错误是我将第二个均匀监听器放在文档本身上,而不是简单地将其添加到视图端口设置为 100% 的导航区域。 here's how I canged my code:这是我如何修改我的代码:

// ! 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");
  });
})


// ! 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM