
本文旨在解决J*aScript侧边栏中点击锚点无法平滑滚动到指定区域,以及滚动时导航链接高亮失效的问题。核心在于将全局滚动事件监听器正确地绑定到`window`对象,而非未定义的变量,同时确保jQuery库已正确引入,从而实现预期的平滑滚动和导航状态更新效果。
在构建具有侧边导航栏的网页时,我们常常需要实现点击导航链接时页面平滑滚动到对应内容区域,并实时更新导航链接的激活状态。然而,在实际开发中,开发者可能会遇到滚动功能失效的问题,尤其是在事件监听器的绑定上出现偏差。本教程将深入探讨这类问题的根源并提供一套可靠的解决方案。
原始代码中,平滑滚动、导航高亮和侧边栏粘性定位的逻辑都依赖于滚动事件。然而,e.addEventListener('scroll', ...) 的写法是错误的。e 通常在事件处理函数内部作为事件对象被传递,但在全局作用域中直接使用 e 作为 addEventListener 的目标对象是未定义的。全局的滚动事件应该被绑定到 window 对象上。
要解决上述问题,只需将所有对 e.addEventListener('scroll', ...) 的调用替换为 window.addEventListener('scroll', ...)。window 对象代表了浏览器窗口,是监听全局滚动事件的正确目标。
以下是修正后的J*aScript代码示例:
// 确保jQuery库已引入
// <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
$(document).ready(function () {
// 1. 点击导航链接平滑滚动到指定区域
$('a[href*=\#]').on('click', function (e) {
// e.preventDefault(); // 可以取消默认的哈希跳转行为,实现纯粹的平滑滚动
// 如果需要页面URL哈希随滚动更新,则不取消默认行为,或者手动更新
var target = $(this).attr("href"); // 获取目标元素的ID
if ($(target).length) { // 检查目标元素是否存在
$('html, body').animate({
scrollTop: $(target).offset().top // 计算目标元素的顶部偏移量
}, 600); // 滚动动画时长为600毫秒
}
});
// 2. 滚动时更新导航链接的激活状态
window.addEventListener('scroll', () => {
var scrollDistance = $(window).scrollTop(); // 获取当前滚动距离
// 遍历所有内容区段,根据滚动位置激活对应的导航链接
$('.page-section').each(function (i) {
// 当内容区段的顶部位置小于等于当前滚动距离时,激活其对应的导航链接
if ($(this).position().top <= scrollDistance + 100) { // +100 是为了提前激活,可根据需要调整
$('.n*igation a.active').removeClass('active'); // 移除当前激活的链接
$('.n*igation a').eq(i).addClass('active'); // 激活当前区段对应的链接
}
});
});
// 3. 侧边导航栏的粘性定位(Sticky N*igation)
var fixmeTop = $('.n*igation').offset().top; // 获取导航栏的初始顶部位置
window.addEventListener('scroll', () => {
var currentScroll = $(window).scrollTop(); // 获取当前滚动距离
if (currentScroll >= fixmeTop) {
// 当滚动距离超过导航栏初始位置时,将其定位为fixed
$('.n*igation').css({
position: 'fixed',
top: '80px', // 调整为合适的值,例如距离顶部80px
float: 'left' // 保持浮动
});
} else {
// 否则恢复为absolute定位
$('.n*igation').css({
position: 'absolute',
top: '50px', // 恢复到初始位置或合适的值
float: 'left'
});
}
});
});为了使上述J*aScript代码正常工作,需要一个匹配的HTML结构。以下是包含侧边栏导航和内容区段的完整HTML示例:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>侧边栏滚动导航教程</title>
<!-- 引入jQuery库 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
/* 示例CSS样式,用于演示效果 */
body { margin: 0; font-family: sans-serif; }
.side-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.5);
z-index: 1000;
display: block; /* 示例中设置为block,实际应用中可能通过JS控制显示隐藏 */
}
.faq_sidebar {
width: 300px; /* 侧边栏宽度 */
height: 100%;
background-color: #fff;
position: absolute;
left: 0;
top: 0;
overflow-y: auto; /* 侧边栏内部可滚动 */
padding-top: 20px;
}
.faq-section1 { padding: 20px; border-bottom: 1px solid #eee; }
.faq_close { text-align: right; }
.n*igation {
padding: 20px;
width: 260px; /* 导航栏宽度 */
background-color: #f8f8f8;
border-right: 1px solid #eee;
box-sizing: border-box;
z-index: 10; /* 确保粘性导航在内容之上 */
/* 初始定位,会被JS覆盖 */
position: absolute;
top: 50px;
float: left;
}
.n*igation__link {
display: block;
padding: 10px 15px;
text-decoration: none;
color: #333;
border-left: 3px solid transparent;
margin-bottom: 5px;
}
.n*igation__link:hover { background-color: #e0e0e0; }
.n*igation__link.active {
background-color: #e6f7ff;
color: #1890ff;
border-left-color: #1890ff;
font-weight: bold;
}
.tab-content {
margin-left: 300px; /* 为侧边栏留出空间 */
padding: 20px;
}
.page-section {
min-height: 600px; /* 确保每个区段有足够的滚动高度 */
padding: 40px 0;
border-bottom: 1px solid #eee;
}
.page-section:last-child { border-bottom: none; }
h1 { margin-top: 0; }
</style>
</head>
<body>
<div class="side-overlay" id="side-overlay">
<div class="faq_sidebar" id="faqs">
<div class="container-fluid faq-section1">
<div class="row">
<div class="col-md-11">
<h5 class="subscription-subhead">FAQ’s</h5>
<h2 class="subscription-title js-scroll fade-in-bottom">
You h*e questions, we h*e answers
</h2>
</div>
<div class="col-md-1 faq_close">
<a href="j*ascript:void(0)" id="closefaqx" class="closebtn_faq" onclick="closeFaq()">
@@##@@
</a>
</div>
</div>
</div>
<div class="faq_section2">
<n* class="n*igation" id="mainN*">
<a class="n*igation__link" href="#1">What is Lorem Ipsum?</a>
<a class="n*igation__link" href="#2">Why do we use it?</a>
<a class="n*igation__link" href="#3">Where does it come from?</a>
<a class="n*igation__link" href="#4">Where can I get some?</a>
<a class="n*igation__link" href="#5">What is Lorem Ipsum?</a>
</n*>
<div class="tab-content">
<div class="nestedn*">
<div class="page-section hero" id="1">
<h1>Section 1: What is Lorem Ipsum?</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/2343">
<img src="https://img.php.cn/upload/ai_manual/001/246/273/175989360310438.png" alt="语流软著宝">
</a>
<div class="aritcle_card_info">
<a href="/ai/2343">语流软著宝</a>
<p>AI智能软件著作权申请材料自动生成平台</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="语流软著宝">
<span>228</span>
</div>
</div>
<a href="/ai/2343" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="语流软著宝">
</a>
</div>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
</div>
<div class="page-section" id="2">
<h1>Section 2: Why do we use it?</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
</div>
<div class="page-section" id="3">
<h1>Section 3: Where does it come from?</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
</div>
<div class="page-section" id="4">
<h1>Section 4: Where can I get some?</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
</div>
<div class="page-section" id="5">
<h1>Section 5: What is Lorem Ipsum?</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliqué id soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem, incidunt eos provident dolore illum veniam molestias beatae eveniet molestiae aliquid soluta cum iste nam, necessitatibus repellat totam, pariatur est tenetur?</p>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>通过正确理解和使用 window.addEventListener,我们可以有效解决J*aScript侧边栏中平滑滚动和导航高亮失效的问题,从而提供更流畅、更直观的用户体验。

以上就是解决J*aScript侧边栏平滑滚动与导航高亮失效问题的详细内容,更多请关注其它相关文章!
# javascript
# java
# jquery
# html
# js
# css
# 在实际
# 地产广告营销推广方案
# 遍历
# 只需
# 外贸工厂营销推广文案范文
# 黄州媒体推广视频下载网站
# 宁德seo优化方案
# 怎样进行关键词推广排名
# 方山网站推广平台电话是多少
# 中山优化网站多少钱
# 昌平区全网营销推广招聘
# 宜丰网站seo优化
# 高唐县优化网站
# 第一个
# 偏移量
# 是在
# 栏中
# 跳转
# 将其
# 绑定
# cd
# win
# html文件
# ai
# 浏览器
# ajax
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
《暗黑破坏神4》国服回归送狂欢礼包 价值6916元
《鹿路通》退余额方法
b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法
精通VS Code多光标编辑以实现闪电般快速的修改
抖音赚钱快速入门_新手必看的抖音赚钱步骤
电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】
Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法
Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解
yy漫画登录页面官方入口_yy漫画在线阅读网址入口
C#解析并修改XML后保存 如何确保格式与编码的正确性
iPhone14开启Apple TV遥控设置
研招网官方网站正版登录网址_中国研究生招生信息网官网首页
sublime text 4如何安装_最新版sublime下载与汉化教程
《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐
C++如何将字符串转换为大写或小写_C++ transform函数的使用技巧
OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南
汽水音乐网页端访问 汽水音乐官方网页直达
抖音网页版地址直接进入_抖音网页版在线观看入口
TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法
食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗
获取WooCommerce产品在后台编辑页面的分类ID
全球各国上班时间表外贸邮件时间
sf漫画官网登录入口直达_sf漫画官方正版网址
跨语言测试实践:使用Python Selenium测试现有J*a Web项目
J*aScript与HTML元素交互:图片点击事件与链接处理教程
《小宇宙》标记不友善评论方法
使用Google服务账号实现Google Drive API无缝集成与文件访问
火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解
使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留
Win10共享文件夹设置方法 Win10局域网文件共享全攻略【教程】
yy漫画官方网站登录入口_yy漫画在线阅读页面地址
J*aScript装饰器_元编程实战
房产|直播|视频号怎么认证开通?|直播|需要什么资质?
word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法
如何配置VS Code作为您Git操作的默认编辑器
汽车之家网页版免费登录_汽车之家官网首页直接进入
铁路12306买票怎么选双人铺 铁路12306卧铺分配规则说明
家里的小飞虫总是不断,用什么方法可以彻底根除?
《偃武》甘宁技能详解
Google Drive API 认证:服务账户与OAuth 2.0的选择与实践
苹果手机缓存怎么清除_苹果手机缓存如何清除iphone各版本操作步骤
mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法
《植物大战僵尸3》火龙草作用介绍
iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍
FullCalendar自定义按钮样式定制指南
在React中正确处理HTML input type="number"的数值类型
韩小圈网页版PC端入口 韩小圈网页版官方网站入口
《图怪兽》退出登录方法
《i莞家》修改昵称方法
包子漫画在线观看入口 包子漫画网正版全集链接
2025-11-06
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。