当前位置:首页 > JavaScript

js实现二级菜单

2026-04-03 23:59:03JavaScript

实现二级菜单的基本思路

使用HTML、CSS和JavaScript可以轻松实现二级菜单功能。核心思路是通过事件监听控制子菜单的显示与隐藏。

HTML结构示例

<ul class="menu">
  <li>
    <a href="#">主菜单1</a>
    <ul class="submenu">
      <li><a href="#">子菜单1</a></li>
      <li><a href="#">子菜单2</a></li>
    </ul>
  </li>
  <li>
    <a href="#">主菜单2</a>
    <ul class="submenu">
      <li><a href="#">子菜单3</a></li>
      <li><a href="#">子菜单4</a></li>
    </ul>
  </li>
</ul>

CSS样式设置

.menu {
  list-style: none;
  padding: 0;
  margin: 0;
}

.menu > li {
  position: relative;
  display: inline-block;
}

.submenu {
  display: none;
  position: absolute;
  left: 0;
  top: 100%;
  background: #fff;
  padding: 0;
  box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

.menu li:hover > .submenu {
  display: block;
}

JavaScript交互增强

如果需要更精确的控制,可以使用JavaScript:

document.querySelectorAll('.menu > li').forEach(item => {
  item.addEventListener('mouseenter', function() {
    this.querySelector('.submenu').style.display = 'block';
  });

  item.addEventListener('mouseleave', function() {
    this.querySelector('.submenu').style.display = 'none';
  });
});

响应式处理

针对移动设备可以添加点击事件:

if (window.innerWidth < 768) {
  document.querySelectorAll('.menu > li > a').forEach(link => {
    link.addEventListener('click', function(e) {
      e.preventDefault();
      const submenu = this.nextElementSibling;
      submenu.style.display = submenu.style.display === 'block' ? 'none' : 'block';
    });
  });
}

动画效果增强

使用CSS过渡效果可以让菜单显示更平滑:

.submenu {
  opacity: 0;
  transform: translateY(-10px);
  transition: all 0.3s ease;
  pointer-events: none;
}

.menu li:hover > .submenu {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

无障碍优化

为屏幕阅读器添加ARIA属性:

js实现二级菜单

<ul class="menu" role="menubar">
  <li role="none">
    <a href="#" role="menuitem" aria-haspopup="true">主菜单1</a>
    <ul class="submenu" role="menu">
      <li role="none"><a href="#" role="menuitem">子菜单1</a></li>
    </ul>
  </li>
</ul>

通过以上方法可以实现一个功能完善、响应式的二级菜单系统。根据具体需求可以调整交互方式和视觉效果。

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

相关文章

css制作tab菜单

css制作tab菜单

CSS制作Tab菜单的方法 HTML结构 使用无序列表和div容器构建基础结构,列表项为标签页标题,div内放置对应内容块。 <ul class="tab-menu"> <li…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

css制作横向菜单

css制作横向菜单

使用 Flexbox 制作横向菜单 Flexbox 是制作横向菜单的现代方法,代码简洁且兼容性好。以下是一个基本实现: <nav class="horizontal-menu"> &…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…