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

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

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来管理元素的类:

// 添加类
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实现菜单导航

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

相关文章

vue菜单tab实现

vue菜单tab实现

实现Vue菜单Tab的步骤 在Vue中实现菜单Tab功能,可以通过动态组件或条件渲染来实现。以下是几种常见的方法: 使用动态组件 动态组件允许根据当前选中的Tab动态切换显示内容。定义一个组件数组…

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

css制作下拉菜单

css制作下拉菜单

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

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…