当前位置:首页 > 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
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…