如何用Jq点击导航栏菜单实现页面区域精准滚动?
- 内容介绍
- 文章标签
- 相关推荐
常见痛点
* 如何让点击导航后页面平滑滚动到对应位置?* 固定导航栏会遮挡目标内容,导致滚动后位置不准确。* 滚动时如何同步高亮当前所在区域?说起来,* 在不同浏览器、移动端上的兼容性如何保证?
准备工作
先确保页面结构清晰:一个固定侧边导航和若干内容区块。每个内容区块用 id 标识,导航链接使用对应的锚点。
... 内容 ...
... 内容 ...
... 内容 ...
引入 jQuery:
script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"
实现平滑滚动
计算精准偏移量
固定导航高度为60px。所以在滚动前要减去该高度,使目标内容不被遮挡。
$.on{
e.preventDefault;var target = $.attr;var offsetTop = $.offset.top - $.outerHeight;$.animate,});
监听滚动事件并高亮当前区块
{
var $sections = $,$links = $;$.on{
var currentTop = $.scrollTop + $.outerHeight +1;怎么说呢,$sections.each{
var $sec = $;if .top <= currentTop &&
$sec.offset.top + $sec.outerHeight> currentTop) {
$links.removeClass
.filter+'"]').addClass;}
}),}).trigger;// 初始化
}),
上述代码会在页面滚动时实时判断当前可视区段。 并将对应导航链接添加active类,实现高亮效果。
完整示例代码
<html lang="zh-CN">
&lad>
<meta charset="UTF-8">
<title»Jq点击导航栏菜单实现精准滚动<title/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"><script/>
<script»$.ready{ /* 上面两段 JS 合并放此 */ });<script/>
<body>
<nav class="nav">
<u lss="ul">
<i&la href="#intro"»简介<i/>
<i&la href="#features"»功能<i/>
<i&la href="#contact"»联系<i/>
<u/>
<small class="section" id="intro">...
...
<small
... 更多区块 ...
<small
<small
<small
&amp;ltsmall
<small
&amp;ltsmall
<small
&amp;ltsmall
&amp;ltsmall
<detail
"
说到小贴士。
- 如果你使用的是固定顶部导航,记得把计算偏移量改为顶部高度。
- Avoid hardcoding heights;可以用动态读取 $.height。
- 对于移动端,可考虑使用触摸事件或 debounce 函数减少 scroll 回调频率。
- 测试不同浏览器,确认 animate 动画流畅无抖动。
- If 页面长度很长。可加上“返回顶部”按钮,让使用者用起来更舒服。
此方案已在多家项目中验证稳定。若遇到特殊需求,请根据上述思路自行 祝编码愉快!
常见痛点
* 如何让点击导航后页面平滑滚动到对应位置?* 固定导航栏会遮挡目标内容,导致滚动后位置不准确。* 滚动时如何同步高亮当前所在区域?说起来,* 在不同浏览器、移动端上的兼容性如何保证?
准备工作
先确保页面结构清晰:一个固定侧边导航和若干内容区块。每个内容区块用 id 标识,导航链接使用对应的锚点。
... 内容 ...
... 内容 ...
... 内容 ...
引入 jQuery:
script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"
实现平滑滚动
计算精准偏移量
固定导航高度为60px。所以在滚动前要减去该高度,使目标内容不被遮挡。
$.on{
e.preventDefault;var target = $.attr;var offsetTop = $.offset.top - $.outerHeight;$.animate,});
监听滚动事件并高亮当前区块
{
var $sections = $,$links = $;$.on{
var currentTop = $.scrollTop + $.outerHeight +1;怎么说呢,$sections.each{
var $sec = $;if .top <= currentTop &&
$sec.offset.top + $sec.outerHeight> currentTop) {
$links.removeClass
.filter+'"]').addClass;}
}),}).trigger;// 初始化
}),
上述代码会在页面滚动时实时判断当前可视区段。 并将对应导航链接添加active类,实现高亮效果。
完整示例代码
<html lang="zh-CN">
&lad>
<meta charset="UTF-8">
<title»Jq点击导航栏菜单实现精准滚动<title/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"><script/>
<script»$.ready{ /* 上面两段 JS 合并放此 */ });<script/>
<body>
<nav class="nav">
<u lss="ul">
<i&la href="#intro"»简介<i/>
<i&la href="#features"»功能<i/>
<i&la href="#contact"»联系<i/>
<u/>
<small class="section" id="intro">...
...
<small
... 更多区块 ...
<small
<small
<small
&amp;ltsmall
<small
&amp;ltsmall
<small
&amp;ltsmall
&amp;ltsmall
<detail
"
说到小贴士。
- 如果你使用的是固定顶部导航,记得把计算偏移量改为顶部高度。
- Avoid hardcoding heights;可以用动态读取 $.height。
- 对于移动端,可考虑使用触摸事件或 debounce 函数减少 scroll 回调频率。
- 测试不同浏览器,确认 animate 动画流畅无抖动。
- If 页面长度很长。可加上“返回顶部”按钮,让使用者用起来更舒服。
此方案已在多家项目中验证稳定。若遇到特殊需求,请根据上述思路自行 祝编码愉快!

