当前位置:首页 > JavaScript

js实现菜单导航

2026-01-16 13:30:37JavaScript

实现基础菜单导航结构

使用HTML和CSS创建菜单的基本结构,再通过JavaScript添加交互功能。HTML部分通常使用<ul><li>标签构建层级:

<nav id="mainMenu">
  <ul>
    <li><a href="#">首页</a></li>
    <li>
      <a href="#">产品</a>
      <ul class="submenu">
        <li><a href="#">产品A</a></li>
        <li><a href="#">产品B</a></li>
      </ul>
    </li>
    <li><a href="#">关于我们</a></li>
  </ul>
</nav>

CSS部分控制菜单样式和初始状态:

#mainMenu ul {
  list-style: none;
  padding: 0;
}
#mainMenu > ul > li {
  display: inline-block;
  position: relative;
}
.submenu {
  display: none;
  position: absolute;
  background: #fff;
}

添加JavaScript交互逻辑

通过事件监听实现下拉菜单功能。以下示例使用事件委托提高性能:

js实现菜单导航

document.getElementById('mainMenu').addEventListener('mouseover', function(e) {
  if (e.target.tagName === 'LI' && e.target.querySelector('.submenu')) {
    e.target.querySelector('.submenu').style.display = 'block';
  }
});

document.getElementById('mainMenu').addEventListener('mouseout', function(e) {
  if (e.target.tagName === 'LI' && e.target.querySelector('.submenu')) {
    e.target.querySelector('.submenu').style.display = 'none';
  }
});

响应式菜单实现

针对移动设备添加汉堡菜单功能。首先修改CSS添加响应式规则:

@media (max-width: 768px) {
  #mainMenu > ul > li {
    display: block;
  }
  #mainMenu {
    display: none;
  }
  .menuToggle {
    display: block;
  }
}

添加JavaScript控制移动端菜单切换:

js实现菜单导航

document.querySelector('.menuToggle').addEventListener('click', function() {
  const menu = document.getElementById('mainMenu');
  menu.style.display = menu.style.display === 'block' ? 'none' : 'block';
});

高亮当前菜单项

根据当前URL自动高亮对应菜单项:

const currentPath = window.location.pathname;
const menuLinks = document.querySelectorAll('#mainMenu a');

menuLinks.forEach(link => {
  if (link.getAttribute('href') === currentPath) {
    link.classList.add('active');
  }
});

动画效果增强

使用CSS过渡效果平滑显示子菜单:

.submenu {
  opacity: 0;
  transform: translateY(-10px);
  transition: opacity 0.3s, transform 0.3s;
}
.submenu.show {
  opacity: 1;
  transform: translateY(0);
}

修改JavaScript控制类名而非直接修改样式:

// 替换原来的display操作
e.target.querySelector('.submenu').classList.add('show');
e.target.querySelector('.submenu').classList.remove('show');

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

相关文章

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

vue实现导航菜单

vue实现导航菜单

Vue 实现导航菜单的方法 基础路由导航实现 在 Vue 项目中,使用 vue-router 可以轻松实现导航菜单功能。首先安装并配置路由: npm install vue-router 在 ro…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue…

css div 制作导航菜单

css div 制作导航菜单

基本导航菜单结构 使用HTML创建一个简单的导航菜单结构,通常使用<ul>和li>列表实现。每个菜单项用<a>标签包裹以实现链接功能。 <div class="n…

纯css制作tab菜单

纯css制作tab菜单

纯CSS制作Tab菜单的方法 使用radio input控制切换 通过<input type="radio">和<label>元素配合实现无JavaScript的Tab切换效果…