当前位置:首页 > JavaScript

js 实现菜单切换

2026-03-16 04:54:32JavaScript

实现菜单切换的 JavaScript 方法

使用 classList 切换类名

通过 classList.toggle() 方法动态添加或移除 CSS 类,控制菜单显示/隐藏状态:

const menuBtn = document.querySelector('.menu-btn');
const menu = document.querySelector('.menu');

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

对应 CSS 示例:

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

直接修改 style 属性

通过 JavaScript 直接操作元素的 style 属性:

const toggleMenu = () => {
  const menu = document.getElementById('dropdown');
  menu.style.display = menu.style.display === 'block' ? 'none' : 'block';
};

使用数据属性控制状态

通过自定义 data-* 属性存储菜单状态:

document.addEventListener('click', (e) => {
  if (!e.target.matches('[data-toggle="menu"]')) return;

  const targetId = e.target.dataset.target;
  const menu = document.getElementById(targetId);
  const isHidden = menu.dataset.visible === 'false';

  menu.dataset.visible = isHidden;
  menu.style.transform = isHidden ? 'translateX(0)' : 'translateX(-100%)';
});

动画效果实现

结合 CSS transition 实现平滑动画:

function toggleMenu() {
  const nav = document.querySelector('nav');
  nav.style.transform = nav.style.transform.includes('translateX(0)') 
    ? 'translateX(-100%)' 
    : 'translateX(0)';
}

对应 CSS:

nav {
  transform: translateX(-100%);
  transition: transform 0.3s ease-out;
}

多级菜单处理

递归处理嵌套菜单结构:

js 实现菜单切换

document.querySelectorAll('.menu-item').forEach(item => {
  item.addEventListener('click', function() {
    const submenu = this.querySelector('.submenu');
    if (submenu) {
      submenu.style.display = submenu.style.display === 'block' 
        ? 'none' 
        : 'block';
    }
  });
});

注意事项

  • 移动端需考虑触摸事件兼容性
  • 菜单打开时应确保其他交互元素被禁用(如添加遮罩层)
  • 对于复杂动画建议使用 CSS 而非 JavaScript 控制
  • 可访问性需添加 aria-expanded 等 ARIA 属性

完整示例

<button class="menu-toggle">菜单</button>
<nav class="main-menu">
  <ul>
    <li><a href="#">首页</a></li>
    <li class="has-submenu">
      <a href="#">产品</a>
      <ul class="submenu">
        <li><a href="#">产品A</a></li>
        <li><a href="#">产品B</a></li>
      </ul>
    </li>
  </ul>
</nav>

<script>
document.querySelector('.menu-toggle').addEventListener('click', function() {
  document.querySelector('.main-menu').classList.toggle('open');
});

document.querySelectorAll('.has-submenu > a').forEach(link => {
  link.addEventListener('click', function(e) {
    e.preventDefault();
    this.nextElementSibling.classList.toggle('show');
  });
});
</script>

<style>
.main-menu {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease;
}
.main-menu.open {
  max-height: 500px;
}
.submenu {
  display: none;
}
.submenu.show {
  display: block;
}
</style>

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

相关文章

css二级菜单制作

css二级菜单制作

使用纯CSS实现二级菜单 通过嵌套HTML结构和CSS选择器实现二级菜单的显示与隐藏效果。以下是一个基础实现方案: HTML结构: <ul class="menu"> <li…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现分页

js实现分页

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

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…