当前位置:首页 > JavaScript

js 实现菜单切换

2026-02-03 04:08:39JavaScript

实现菜单切换的 JavaScript 方法

使用 classList 切换类名

通过 classList.toggle() 动态添加或移除控制菜单显示的 CSS 类,例如 active。HTML 结构需包含触发按钮和菜单容器:

<button id="menuToggle">菜单</button>
<nav id="menu" class="hidden">
  <ul>
    <li><a href="#">首页</a></li>
    <li><a href="#">产品</a></li>
  </ul>
</nav>

CSS 定义隐藏状态和显示样式:

.hidden { display: none; }
.active { display: block; }

JavaScript 实现切换逻辑:

const toggleBtn = document.getElementById('menuToggle');
const menu = document.getElementById('menu');

toggleBtn.addEventListener('click', () => {
  menu.classList.toggle('active');
});

直接操作 style 属性

通过修改元素的 style.display 属性实现显隐切换:

js 实现菜单切换

const toggleBtn = document.getElementById('menuToggle');
const menu = document.getElementById('menu');

toggleBtn.addEventListener('click', () => {
  if (menu.style.display === 'none') {
    menu.style.display = 'block';
  } else {
    menu.style.display = 'none';
  }
});

使用数据属性(data-*)

通过自定义属性存储状态,增强代码可读性:

<button id="menuToggle" data-menu-state="closed">菜单</button>

JavaScript 逻辑:

const toggleBtn = document.getElementById('menuToggle');
const menu = document.getElementById('menu');

toggleBtn.addEventListener('click', () => {
  const state = toggleBtn.getAttribute('data-menu-state');
  if (state === 'closed') {
    menu.style.display = 'block';
    toggleBtn.setAttribute('data-menu-state', 'open');
  } else {
    menu.style.display = 'none';
    toggleBtn.setAttribute('data-menu-state', 'closed');
  }
});

动画效果增强

结合 CSS transition 实现平滑动画效果:

js 实现菜单切换

#menu {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease;
}
#menu.active {
  max-height: 500px;
}

JavaScript 只需切换类名:

document.getElementById('menuToggle').addEventListener('click', () => {
  document.getElementById('menu').classList.toggle('active');
});

多级菜单实现

对于嵌套菜单,使用事件委托处理动态元素:

<ul id="mainMenu">
  <li>
    <a href="#">一级菜单</a>
    <ul class="submenu">
      <li><a href="#">二级项</a></li>
    </ul>
  </li>
</ul>

JavaScript 实现:

document.getElementById('mainMenu').addEventListener('click', (e) => {
  if (e.target.nextElementSibling?.classList.contains('submenu')) {
    e.target.nextElementSibling.classList.toggle('active');
  }
});

标签: 菜单js
分享给朋友:

相关文章

如何制作css导航菜单

如何制作css导航菜单

创建基本HTML结构 导航菜单的基础是HTML结构。使用<nav>标签包裹无序列表<ul>,每个菜单项用<li>标签表示,链接用<a>标签。 <…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 基于路由的动态菜单 在 Vue 项目中,可以利用 Vue Router 实现动态菜单。首先定义路由配置,包含菜单所需的元信息(如标题、图标等)。 const routes =…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…