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

相关文章

vue实现菜单定位

vue实现菜单定位

实现菜单定位的方法 在Vue中实现菜单定位功能,可以通过监听滚动事件或使用Intersection Observer API来判断当前显示的菜单项,并高亮对应的导航链接。以下是几种常见的实现方式:…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现乘

js实现乘

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

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…