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

相关文章

js实现vue

js实现vue

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

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…