<…">
当前位置:首页 > JavaScript

js实现菜单导航

2026-02-28 23:24:31JavaScript

实现基础菜单导航结构

使用HTML和CSS创建基本的菜单结构,配合JavaScript实现交互功能。以下是一个简单的垂直菜单导航示例:

<nav id="mainMenu">
  <ul>
    <li><a href="#home">首页</a></li>
    <li><a href="#products">产品</a>
      <ul class="submenu">
        <li><a href="#product1">产品1</a></li>
        <li><a href="#product2">产品2</a></li>
      </ul>
    </li>
    <li><a href="#contact">联系我们</a></li>
  </ul>
</nav>
#mainMenu ul {
  list-style: none;
  padding: 0;
}
#mainMenu li {
  position: relative;
}
.submenu {
  display: none;
  position: absolute;
  left: 100%;
  top: 0;
}
.submenu.active {
  display: block;
}

添加JavaScript交互逻辑

通过事件监听实现菜单的显示/隐藏功能:

js实现菜单导航

document.addEventListener('DOMContentLoaded', function() {
  const menuItems = document.querySelectorAll('#mainMenu > ul > li');

  menuItems.forEach(item => {
    if(item.querySelector('.submenu')) {
      item.addEventListener('mouseenter', function() {
        this.querySelector('.submenu').classList.add('active');
      });
      item.addEventListener('mouseleave', function() {
        this.querySelector('.submenu').classList.remove('active');
      });
    }
  });
});

响应式菜单实现

针对移动设备添加汉堡菜单功能:

<button id="mobileMenuBtn">☰</button>
<nav id="mobileMenu">
  <!-- 菜单内容与桌面版相同 -->
</nav>
#mobileMenuBtn {
  display: none;
}
@media (max-width: 768px) {
  #mobileMenuBtn {
    display: block;
  }
  #mobileMenu {
    display: none;
  }
  #mobileMenu.active {
    display: block;
  }
}
const mobileMenuBtn = document.getElementById('mobileMenuBtn');
const mobileMenu = document.getElementById('mobileMenu');

mobileMenuBtn.addEventListener('click', function() {
  mobileMenu.classList.toggle('active');
});

使用classList管理菜单状态

现代JavaScript推荐使用classList API来管理元素的类:

js实现菜单导航

// 添加类
element.classList.add('active');

// 移除类
element.classList.remove('active');

// 切换类
element.classList.toggle('active');

// 检查是否包含类
if(element.classList.contains('active')) {
  // 执行操作
}

增强用户体验的功能

添加键盘导航支持和ARIA属性提升可访问性:

menuItems.forEach((item, index) => {
  item.setAttribute('tabindex', '0');
  item.addEventListener('keydown', function(e) {
    if(e.key === 'Enter' || e.key === ' ') {
      const submenu = this.querySelector('.submenu');
      if(submenu) {
        submenu.classList.toggle('active');
      }
    }

    // 方向键导航
    if(e.key === 'ArrowDown') {
      const nextItem = menuItems[index + 1];
      if(nextItem) nextItem.focus();
    }
    if(e.key === 'ArrowUp') {
      const prevItem = menuItems[index - 1];
      if(prevItem) prevItem.focus();
    }
  });
});

使用事件委托优化性能

对于大型菜单,使用事件委托可以减少事件监听器数量:

document.getElementById('mainMenu').addEventListener('click', function(e) {
  if(e.target.closest('li').querySelector('.submenu')) {
    e.preventDefault();
    e.target.closest('li').querySelector('.submenu').classList.toggle('active');
  }
});

这些方法提供了从基础到进阶的菜单导航实现方案,可以根据具体需求进行组合和调整。

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

相关文章

css制作下拉菜单

css制作下拉菜单

CSS 制作下拉菜单的方法 使用纯 CSS 可以创建简单的下拉菜单效果,主要依赖 :hover 伪类和 display 属性控制子菜单的显示与隐藏。 基础 HTML 结构 <div c…

css制作二级菜单

css制作二级菜单

使用纯CSS制作二级菜单 通过CSS的:hover伪类和子选择器实现二级菜单的显示与隐藏。以下是一个典型的结构和样式示例: HTML结构 <nav class="menu"> &l…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

css div 制作导航菜单

css div 制作导航菜单

使用 CSS 和 Div 制作导航菜单 导航菜单是网站的重要组成部分,以下是通过 CSS 和 div 元素制作导航菜单的方法。 基本 HTML 结构 创建一个简单的 div 结构作为导航菜单的基础:…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…