当前位置:首页 > 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实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js实现授权

js实现授权

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