当前位置:首页 > JavaScript

js实现导航菜单

2026-04-03 22:46:08JavaScript

实现导航菜单的基本结构

使用HTML和CSS创建导航菜单的基础结构,通常采用无序列表<ul>实现。HTML结构示例:

<nav class="navbar">
  <ul>
    <li><a href="#home">首页</a></li>
    <li><a href="#services">服务</a></li>
    <li><a href="#about">关于</a></li>
    <li><a href="#contact">联系</a></li>
  </ul>
</nav>

基础CSS样式示例:

.navbar ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  display: flex;
  gap: 20px;
}
.navbar a {
  text-decoration: none;
  color: #333;
  padding: 10px 15px;
}

添加交互效果

通过JavaScript实现鼠标悬停效果和点击事件。以下代码为菜单项添加悬停高亮和点击激活状态:

const navItems = document.querySelectorAll('.navbar li');

navItems.forEach(item => {
  // 鼠标悬停效果
  item.addEventListener('mouseenter', () => {
    item.style.backgroundColor = '#f0f0f0';
  });

  item.addEventListener('mouseleave', () => {
    item.style.backgroundColor = '';
  });

  // 点击激活状态
  item.addEventListener('click', () => {
    navItems.forEach(i => i.classList.remove('active'));
    item.classList.add('active');
  });
});

对应的CSS激活状态样式:

.navbar li.active {
  border-bottom: 2px solid #0066cc;
}

实现响应式导航

针对移动设备添加汉堡菜单功能。修改HTML结构:

<nav class="navbar">
  <button class="menu-toggle">☰</button>
  <ul class="nav-list">
    <!-- 菜单项保持不变 -->
  </ul>
</nav>

添加响应式CSS:

.menu-toggle {
  display: none;
  background: none;
  border: none;
  font-size: 24px;
}

@media (max-width: 768px) {
  .menu-toggle {
    display: block;
  }
  .nav-list {
    display: none;
    flex-direction: column;
  }
  .nav-list.show {
    display: flex;
  }
}

JavaScript控制菜单显示/隐藏:

const menuToggle = document.querySelector('.menu-toggle');
const navList = document.querySelector('.nav-list');

menuToggle.addEventListener('click', () => {
  navList.classList.toggle('show');
});

添加滚动效果

实现页面滚动时导航栏固定定位和样式变化:

window.addEventListener('scroll', () => {
  const navbar = document.querySelector('.navbar');
  if (window.scrollY > 50) {
    navbar.style.position = 'fixed';
    navbar.style.top = '0';
    navbar.style.width = '100%';
    navbar.style.background = 'white';
    navbar.style.boxShadow = '0 2px 5px rgba(0,0,0,0.1)';
  } else {
    navbar.style.position = 'relative';
    navbar.style.background = '';
    navbar.style.boxShadow = '';
  }
});

高亮当前可见区域

根据滚动位置自动高亮对应的导航项:

js实现导航菜单

const sections = document.querySelectorAll('section');
window.addEventListener('scroll', () => {
  let current = '';
  sections.forEach(section => {
    const sectionTop = section.offsetTop;
    const sectionHeight = section.clientHeight;
    if (pageYOffset >= (sectionTop - sectionHeight / 3)) {
      current = section.getAttribute('id');
    }
  });

  navItems.forEach(item => {
    item.classList.remove('active');
    if (item.querySelector('a').getAttribute('href') === `#${current}`) {
      item.classList.add('active');
    }
  });
});

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

相关文章

css div 制作导航菜单

css div 制作导航菜单

基本导航菜单结构 使用HTML创建一个简单的导航菜单结构,通常使用<ul>和li>列表实现。每个菜单项用<a>标签包裹以实现链接功能。 <div class="n…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

jquery 菜单

jquery 菜单

jQuery 菜单实现方法 使用 jQuery 创建动态菜单可以通过多种方式实现,以下是几种常见的方法: 基于 HTML 和 CSS 的基础结构 创建菜单的 HTML 结构通常使用无序列表 <…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…