当前位置:首页 > 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 实现动态菜单调用的方法 使用路由配置生成菜单 在 Vue 项目中,可以通过路由配置自动生成菜单结构。路由配置通常包含 path、name、meta 等信息,这些信息可用于构建菜单项。 //…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https:/…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div c…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…