我正在创建一个简单的单页网站的响应式导航栏。打开汉堡菜单并单击锚链接后,汉堡事件侦听器消失了,所以我必须刷新才能让它再次工作。不使用链接,我可以毫无问题地打开和关闭。我究竟做错了什么?如何防止事件侦听器消失?我试过使用 event.preventDefault() 函数。泰亚!
JS:
document.addEventListener('DOMContentLoaded', function(event) {
const navLinks = document.querySelector(".nav-ul");
const hamburgerIcon = document.querySelector("#open-nav");
const closeIcon = document.querySelector("#close-nav");
const nav = document.querySelector(".navbar-links")
hamburgerIcon.addEventListener('click', function() {
nav.classList.add("open");
navLinks.style.display = "block";
hamburgerIcon.style.display = "none";
closeIcon.style.display = "block";
});
closeIcon.addEventListener('click', function() {
nav.classList.remove("open");
navLinks.style.display = "none";
hamburgerIcon.style.display = "block";
closeIcon.style.display = "none";
});
});
和 HTML:
<div class="navbar-container">
<div id="navbar">
<div id="open-nav" class="toggle-icon">
<i class="fas fa-bars"></i>
</div>
<div id="close-nav" class="toggle-icon">
<i class="fas fa-times"></i>
</div>
<div class="navbar-links">
<ul class="nav-ul">
<li class="nav-li">
<a class="navlink" href="#home"><%= t("navbar.home").upcase %></a>
</li>
<li class="nav-li">
<a class="navlink" href="#about"><%= t("navbar.about").upcase %></a>
</li>
<li class="nav-li">
<a class="navlink" href="#training"><%= t("navbar.training").upcase %></a>
</li>
<li class="nav-li">
<a class="navlink" href="#coaching"><%= t("navbar.coaching").upcase %></a>
</li>
<li class="nav-li">
<a class="navlink" href="#"><%= t("navbar.contact").upcase %></a>
</li>
</ul>
</div>
</div>
解决方案:
我必须为 hamburgerIcon 事件侦听器内的菜单中的链接添加 event.stopPropagation():
const links = document.querySelectorAll(".navlink");
hamburgerIcon.addEventListener('click', function() {
nav.classList.add("open");
navLinks.style.display = "block";
hamburgerIcon.style.display = "none";
closeIcon.style.display = "block";
links.forEach(link => {
link.addEventListener('click', (event) => {
event.stopPropagation();
});
});
});