当前位置:首页 > 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样式准备

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

.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'));
  });
});

动画效果增强

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

.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"属性支持键盘导航

响应式设计建议

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

js实现三级菜单

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

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

相关文章

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js轮播图实现原理

js轮播图实现原理

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

css二级菜单制作

css二级菜单制作

使用纯CSS制作二级菜单 HTML结构采用嵌套的<ul>和<li>标签,主菜单项包含子菜单: <nav class="menu"> <ul>…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

vue elementui实现菜单

vue elementui实现菜单

使用 Vue 和 Element UI 实现菜单 Element UI 提供了 el-menu 组件,可以轻松实现导航菜单功能。以下是一个完整的实现示例: 安装 Element UI 确保项目已安装…