繁体   English   中英

事件监听器仅工作一次

[英]Event listener only works once

我在事件监听器中创建此函数,以在单击时向我的HTML添加/删除一些类。 问题是事件侦听器只能工作一次,并且需要刷新页面才能再次工作。 我也尝试使用onClick,但它不起作用。

 const menuBtn = document.querySelector('.menu-btn'); const menu = document.querySelector('.menu'); const menuNav = document.querySelector('.menu-nav'); const menuBranding = document.querySelector('.menu-branding'); const navItems = document.querySelectorAll('.nav-item'); let showMenu = false; menuBtn.addEventListener('click', toggleMenu); function toggleMenu() { 'use strict'; if (!showMenu) { menuBtn.classList.add('close'); menu.classList.add('show'); menuNav.classList.add('show'); menuBranding.classList.add('show'); navItems.forEach(item => item.classList.add('show')); // Set Menu State showMenu = true; } else { menuBtn.classList.remove('close'); menu.classList.remove('show'); menuNav.classList.remove('show'); menuBranding.classList.remove('show'); navItems.forEach(item => item.classList.remove('show')); } } 
 <header> <div class="menu-btn"> <div class="btn-line"></div> <div class="btn-line"></div> <div class="btn-line"></div> </div> <nav class="menu"> <div class="menu-branding"> <div class="portrait"></div> </div> <ul class="menu-nav"> <li class="nav-item"> <a href="/" class="nav-link">Home</a> </li> <li class="nav-item"> <a href="/about.html" class="nav-link">About Me</a> </li> <li class="nav-item"> <a href="/work.html" class="nav-link">My Work</a> </li> <li class="nav-item"> <a href="/contact.html" class="nav-link">Contact me</a> </li> </ul> </nav> </header> 

关闭菜单时,需要将showMenu切换回false

function toggleMenu() {
  'use strict';
  if (!showMenu) {
    menuBtn.classList.add('close');
    menu.classList.add('show');
    menuNav.classList.add('show');
    menuBranding.classList.add('show');
    navItems.forEach(item => item.classList.add('show'));

    // Set Menu State

    showMenu = true;

  } else {
    menuBtn.classList.remove('close');
    menu.classList.remove('show');
    menuNav.classList.remove('show');
    menuBranding.classList.remove('show');
    navItems.forEach(item => item.classList.remove('show'));

    showMenu = false;
  }
}

演示

暂无
暂无

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

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