当前位置:首页 > JavaScript

js实现三级菜单

2026-01-30 12:36:26JavaScript

实现三级菜单的JavaScript方法

HTML结构设计

创建一个嵌套的<ul><li>结构表示三级菜单层次:

<ul class="menu-level-1">
  <li>
    <span>一级菜单1</span>
    <ul class="menu-level-2">
      <li>
        <span>二级菜单1</span>
        <ul class="menu-level-3">
          <li><span>三级菜单1</span></li>
          <li><span>三级菜单2</span></li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

CSS样式准备

添加基础样式控制菜单显示/隐藏状态:

js实现三级菜单

.menu-level-2, .menu-level-3 {
  display: none;
  padding-left: 20px;
}
.menu-level-1 > li, .menu-level-2 > li {
  position: relative;
  cursor: pointer;
}
.active > ul {
  display: block;
}

JavaScript交互逻辑

使用事件委托处理菜单点击行为:

document.addEventListener('DOMContentLoaded', function() {
  const menuContainer = document.querySelector('.menu-level-1');

  menuContainer.addEventListener('click', function(e) {
    const target = e.target.closest('li');
    if (!target) return;

    const subMenu = target.querySelector('ul');
    if (!subMenu) return;

    // 切换当前菜单状态
    target.classList.toggle('active');

    // 关闭同级其他菜单
    const siblings = Array.from(target.parentNode.children)
      .filter(child => child !== target);
    siblings.forEach(sib => sib.classList.remove('active'));
  });
});

动画效果增强

为菜单切换添加平滑动画:

js实现三级菜单

.menu-level-2, .menu-level-3 {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}
.active > ul {
  max-height: 500px;
}

键盘导航支持

增加无障碍访问支持:

menuContainer.addEventListener('keydown', function(e) {
  if (e.key === 'Enter' || e.key === ' ') {
    e.preventDefault();
    e.target.closest('li').click();
  }
});

实现注意事项

  • 使用closest()方法确保点击事件正确处理嵌套元素
  • 通过CSS过渡效果提升用户体验
  • 事件委托减少事件监听器数量
  • 合理设置max-height值确保动画效果自然
  • 为菜单项添加tabindex="0"属性支持键盘导航

响应式设计建议

添加媒体查询适应移动设备:

@media (max-width: 768px) {
  .menu-level-1 {
    width: 100%;
  }
  .menu-level-2, .menu-level-3 {
    padding-left: 10px;
  }
}

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

相关文章

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <t…

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

vue实现下拉菜单

vue实现下拉菜单

实现下拉菜单的基本结构 使用 Vue 的 v-show 或 v-if 控制下拉菜单的显示与隐藏。通过点击按钮或父元素触发下拉状态切换。 <template> <div c…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…