当前位置:首页 > JavaScript

js实现导航

2026-02-02 09:58:33JavaScript

实现基础导航栏

使用HTML和CSS创建导航栏结构,通过JavaScript添加交互功能。HTML部分定义导航栏的基本框架,CSS负责样式设计,JavaScript处理动态效果。

<nav id="mainNav">
  <ul>
    <li><a href="#home">Home</a></li>
    <li><a href="#about">About</a></li>
    <li><a href="#services">Services</a></li>
    <li><a href="#contact">Contact</a></li>
  </ul>
</nav>
#mainNav {
  background-color: #333;
  padding: 1rem;
}

#mainNav ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  display: flex;
}

#mainNav li {
  margin-right: 1rem;
}

#mainNav a {
  color: white;
  text-decoration: none;
  padding: 0.5rem 1rem;
}

#mainNav a:hover {
  background-color: #555;
}

添加响应式菜单

对于移动设备,需要实现汉堡菜单功能。通过JavaScript监听窗口大小变化,调整导航栏显示方式。

const nav = document.getElementById('mainNav');
const menuButton = document.createElement('button');
menuButton.innerHTML = '☰';
menuButton.classList.add('menu-toggle');
nav.prepend(menuButton);

function toggleMenu() {
  const ul = nav.querySelector('ul');
  ul.style.display = ul.style.display === 'none' ? 'flex' : 'none';
}

menuButton.addEventListener('click', toggleMenu);

function checkScreenSize() {
  const ul = nav.querySelector('ul');
  if (window.innerWidth > 768) {
    ul.style.display = 'flex';
  } else {
    ul.style.display = 'none';
  }
}

window.addEventListener('resize', checkScreenSize);
checkScreenSize();

实现平滑滚动

为页面内的锚点链接添加平滑滚动效果,提升用户体验。

document.querySelectorAll('a[href^="#"]').forEach(anchor => {
  anchor.addEventListener('click', function(e) {
    e.preventDefault();
    const targetId = this.getAttribute('href');
    const targetElement = document.querySelector(targetId);

    window.scrollTo({
      top: targetElement.offsetTop,
      behavior: 'smooth'
    });
  });
});

添加活动菜单项高亮

根据当前滚动位置自动高亮对应的导航菜单项。

const sections = document.querySelectorAll('section');
const navLinks = document.querySelectorAll('#mainNav a');

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');
    }
  });

  navLinks.forEach(link => {
    link.classList.remove('active');
    if (link.getAttribute('href') === `#${current}`) {
      link.classList.add('active');
    }
  });
});

实现下拉菜单

为具有子菜单的导航项添加下拉功能。

const hasSubmenu = document.querySelectorAll('#mainNav li.has-submenu');

hasSubmenu.forEach(item => {
  const submenu = item.querySelector('ul');
  submenu.style.display = 'none';

  item.addEventListener('mouseenter', () => {
    submenu.style.display = 'block';
  });

  item.addEventListener('mouseleave', () => {
    submenu.style.display = 'none';
  });
});

添加CSS过渡效果

通过CSS增强导航栏的视觉体验。

js实现导航

#mainNav a {
  transition: background-color 0.3s ease;
}

#mainNav ul ul {
  position: absolute;
  background-color: #444;
  min-width: 200px;
  transition: all 0.3s ease;
  opacity: 0;
  visibility: hidden;
}

#mainNav li:hover > ul {
  opacity: 1;
  visibility: visible;
}

标签: js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现二叉树

js实现二叉树

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

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…