核心思想
使用 jQuery 操作导航栏,主要依赖于以下几个核心功能:

(图片来源网络,侵删)
- 事件监听:监听用户的操作,如点击 (
click)、滚动 (scroll)、鼠标悬停 (mouseenter) 等。 - 选择器:精准地找到需要操作的 HTML 元素,如导航链接 (
nav a)、菜单项 (.menu-item) 等。 - DOM 操作:根据事件来修改元素的样式 (
css())、添加/删除 CSS 类 (addClass(),removeClass(),toggleClass()) 或显示/隐藏元素 (show(),hide(),toggle())。
基础点击导航(单页应用锚点跳转)
这是最简单的导航,点击导航链接,页面平滑滚动到对应的部分。
HTML 结构
假设我们有一个单页网站,导航链接指向页面内的不同部分。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">jQuery 导航示例</title>
<style>
/* 基础样式 */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
nav {
background-color: #333;
position: fixed; /* 固定在顶部 */
top: 0;
width: 100%;
z-index: 1000; /* 确保导航栏在最上层 */
}
nav ul {
list-style: none;
margin: 0;
padding: 0;
display: flex; /* 水平排列 */
justify-content: center;
}
nav li {
margin: 0;
}
nav a {
display: block;
color: white;
text-decoration: none;
padding: 15px 20px;
transition: background-color 0.3s;
}
nav a:hover {
background-color: #555;
}
.content-section {
height: 100vh; /* 每个部分占满一屏 */
display: flex;
justify-content: center;
align-items: center;
font-size: 2em;
color: #333;
}
#section1 { background-color: #f1f1f1; }
#section2 { background-color: #e1e1e1; }
#section3 { background-color: #d1d1d1; }
</style>
</head>
<body>
<nav>
<ul>
<li><a href="#section1">首页</a></li>
<li><a href="#section2">关于我们</a></li>
<li><a href="#section3">联系方式</a></li>
</ul>
</nav>
<section id="section1" class="content-section">第一部分</section>
<section id="section2" class="content-section">第二部分</section>
<section id="section3" class="content-section">第三部分</section>
<!-- 引入 jQuery 库 -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- 引入我们的 jQuery 代码 -->
<script src="script.js"></script>
</body>
</html>
jQuery 代码 (script.js)
// 确保文档完全加载后再执行 jQuery 代码
$(document).ready(function(){
// 1. 监听导航链接的点击事件
$('nav a').on('click', function(event){
// 2. 阻止默认的跳转行为(URL 后面会加上 #section1 等)
// 这样我们就可以用 JavaScript 控制滚动
event.preventDefault();
// 3. 获取被点击链接的 href 属性值("#section1")
var targetId = $(this).attr('href');
// 4. 使用 jQuery 的 scrollTop 方法平滑滚动到目标元素的位置
// 'html, body' 是为了兼容不同浏览器
// offset().top 获取目标元素距离顶部的距离
// 800 是滚动动画的持续时间(毫秒)
$('html, body').animate({
scrollTop: $(targetId).offset().top
}, 800);
});
});
滚动时高亮当前所在区域的导航项
这是一个非常实用的功能,当用户滚动页面时,导航栏中对应的链接会高亮显示。
HTML 结构 (与场景一相同)
CSS 增强 (增加一个高亮样式)
在 <style> 标签内添加:

(图片来源网络,侵删)
/* 当前活动链接的样式 */
nav a.active {
background-color: #007bff; /* 蓝色高亮 */
font-weight: bold;
}
jQuery 代码 (script.js)
我们将结合滚动事件和点击事件来实现。
$(document).ready(function(){
// --- 场景一:点击平滑滚动 ---
$('nav a').on('click', function(event){
event.preventDefault();
var targetId = $(this).attr('href');
$('html, body').animate({
scrollTop: $(targetId).offset().top
}, 800);
// 点击后,给当前点击的链接添加 active 类
// 其他链接移除 active 类
$(this).addClass('active').parent().siblings().find('a').removeClass('active');
});
// --- 场景二:滚动时高亮 ---
// 使用节流函数来优化性能,避免滚动时触发太多次
function throttle(func, limit) {
let inThrottle;
return function() {
const args = arguments;
const context = this;
if (!inThrottle) {
func.apply(context, args);
inThrottle = true;
setTimeout(() => inThrottle = false, limit);
}
}
}
function updateActiveNavLink() {
// 获取当前窗口的滚动位置
var scrollPosition = $(window).scrollTop();
// 遍历所有的内容区域
$('.content-section').each(function() {
// 获取每个区域的顶部和底部位置
var sectionTop = $(this).offset().top - 100; // 减去一个偏移量,提前高亮
var sectionBottom = sectionTop + $(this).outerHeight();
// 如果滚动位置在当前区域内
if (scrollPosition >= sectionTop && scrollPosition < sectionBottom) {
// 找到对应的导航链接
var correspondingLink = $('nav a[href="#' + $(this).attr('id') + '"]');
// 给对应的链接添加 active 类,并移除其他链接的 active 类
correspondingLink.addClass('active').parent().siblings().find('a').removeClass('active');
}
});
}
// 监听窗口滚动事件,并使用节流函数
$(window).on('scroll', throttle(updateActiveNavLink, 150));
// 页面加载时也执行一次,以初始化状态
updateActiveNavLink();
});
移动端汉堡菜单(点击展开/收起)
对于小屏幕设备,通常需要一个汉堡菜单图标来收起展开导航项。
HTML 结构 (增加汉堡图标)
<nav>
<div class="hamburger">
<span></span>
<span></span>
<span></span>
</div>
<ul>
<li><a href="#section1">首页</a></li>
<li><a href="#section2">关于我们</a></li>
<li><a href="#section3">联系方式</a></li>
</ul>
</nav>
CSS 增强 (为汉堡菜单和移动端布局添加样式)
/* 汉堡图标样式 */
.hamburger {
display: none; /* 默认隐藏 */
cursor: pointer;
padding: 15px;
}
.hamburger span {
display: block;
width: 25px;
height: 3px;
background-color: white;
margin: 5px 0;
transition: all 0.3s ease-in-out;
}
/* 移动端响应式 */
@media (max-width: 768px) {
.hamburger {
display: block; /* 在小屏幕上显示 */
}
nav ul {
/* 默认收起 */
flex-direction: column;
position: absolute;
top: 60px; /* 位于汉堡菜单下方 */
left: 0;
width: 100%;
background-color: #333;
display: none; /* 初始状态为隐藏 */
}
nav ul.show {
display: flex; /* 点击后显示 */
}
}
jQuery 代码 (script.js)
在之前的代码基础上,增加汉堡菜单的点击逻辑。
$(document).ready(function(){
// --- 场景一和场景二的代码 ---
$('nav a').on('click', function(event){
// ... (代码与场景二相同)
// 点击后,如果是移动端,还要关闭菜单
if (window.innerWidth <= 768) {
$('nav ul').removeClass('show');
}
});
function throttle(func, limit) { /* ... */ }
function updateActiveNavLink() { /* ... */ }
$(window).on('scroll', throttle(updateActiveNavLink, 150));
updateActiveNavLink();
// --- 场景三:汉堡菜单 ---
$('.hamburger').on('click', function(){
// 切换 .show 类来控制菜单的显示和隐藏
$('nav ul').toggleClass('show');
// 可选:点击时让汉堡图标变成 X 形状
$(this).toggleClass('is-active');
});
});
总结与最佳实践
- 引入 jQuery:务必在自定义脚本之前引入 jQuery 库。
- 使用
$(document).ready():确保所有 DOM 元素都加载完毕后再执行你的代码。 - 性能优化:对于
scroll、resize等高频触发的事件,一定要使用节流或防抖技术来优化性能,避免页面卡顿。 - 语义化 HTML:使用
<nav>,<ul>,<li>等语义化标签,这有利于 SEO 和可访问性。 - 响应式设计:导航栏在桌面和移动端应有不同的表现,CSS 的
@media查询和 jQuery 的交互逻辑需要配合使用。 - 可访问性 (Accessibility):为交互元素添加
role和aria-*属性,确保键盘用户也能顺利操作。
从上面的三个场景,你可以组合出功能强大且用户体验良好的网页导航,希望这些代码和解释对你有帮助!
