当前位置:首页 > 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交互逻辑

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

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控制移动端菜单切换:

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控制类名而非直接修改样式:

js实现菜单导航

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

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

相关文章

js实现拖拽

js实现拖拽

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

css制作菜单

css制作菜单

CSS 制作菜单的方法 使用 CSS 可以制作多种风格的菜单,包括水平菜单、垂直菜单、下拉菜单等。以下是几种常见的实现方式。 水平菜单 水平菜单通常用于导航栏,可以通过 display: inlin…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

vue菜单tab实现

vue菜单tab实现

Vue 菜单 Tab 实现方法 使用动态组件切换内容 通过 Vue 的 component 动态组件结合 v-for 渲染菜单项,点击时切换显示内容: <template> <…

js实现授权

js实现授权

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