You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移动端菜单点击关闭功能代码优化咨询:如何简化重复JS代码?

优化移动端菜单点击关闭的简洁实现方法

第一步:优化HTML结构(可选但推荐)

先统一菜单<a>标签的类名,避免每个项使用不同类名,比如统一改为nav-item:

<div class="container">
  <div class="logo">
    <img src="./images/LogoNewTech.png" alt="">
  </div>
  <div class="menu-toggle" id="mobile-menu">
    <span class="mobile-item"></span>
    <span class="mobile-item"></span>
    <span class="mobile-item"></span>
  </div>

  <nav>
    <ul class="nav-list">
      <li><a href="#sobre" class="nav-item">Sobre nós</a></li>
      <li><a href="#produtos" class="nav-item">Produtos</a></li>
      <li><a href="#servicos" class="nav-item">Serviços</a></li>
      <li><a href="#contato" class="nav-item">Contato</a></li>
    </ul>
  </nav>
</div>

第二步:简洁的JavaScript实现方案

方案1:事件委托(最推荐)

利用事件冒泡特性,给父元素.nav-list绑定一次点击事件,通过判断点击目标实现菜单关闭。这种方式性能更优,且后续新增菜单项无需修改JS代码:

const navList = document.querySelector('.nav-list');

navList.addEventListener('click', (e) => {
  if (e.target.closest('.nav-item')) {
    navList.classList.remove('show-menu');
  }
});

方案2:批量绑定事件(不使用事件委托时可选)

如果不想修改原有HTML类名,可通过querySelectorAll批量选择所有菜单项,再循环绑定事件:

const mobileItems = document.querySelectorAll('.Item, .Item1, .Item2, .Item3');
const navList = document.querySelector('.nav-list');

const closeMenu = () => navList.classList.remove('show-menu');
mobileItems.forEach(item => item.addEventListener('click', closeMenu));

优化优势

  • 消除重复代码:避免为每个菜单项编写几乎完全相同的事件监听逻辑
  • 提升性能:事件委托仅需绑定一次事件,比多事件监听更高效
  • 增强扩展性:新增菜单项时,无需额外修改JS代码(事件委托方案)

内容的提问来源于stack exchange,提问作者Otniel Marques

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:23:11