jquery - 窗口调整大小问题以检测锚点
问题描述
在我的 HTML 页面上,我有多个部分创建垂直滚动效果。这些部分中的每一个都具有屏幕窗口 100% 的宽度和高度。在页面顶部,我还设置了一个菜单position: fixed
。当固定菜单到达并通过滚动页面检测到锚点时,菜单的文本颜色会发生变化。
我的问题是当我调整浏览器窗口的大小时,我失去了对锚点的检测。因此,当菜单滚动悬停锚点时,菜单颜色不会改变。
<header id="masthead" class="site-header"> Menu text </header>
<section id="section-1" class="hero"> Section 1 </section>
<section id="section-2" class="hero"> Section 2 </section>
<div class="anchor switch-menu-color"></div>
<section id="section-3" class="hero"> Section 3 </section>
<section id="section-4" class="hero"> Section 4 </section>
var anchor = $('.switch-menu-color').offset().top - 40,
$window = $(window);
$window.on('load scroll resize', function() {
if ($window.scrollTop() >= anchor) {
$("#masthead").addClass("black-text");
} else {
$("#masthead").removeClass("black-text");
}
});
谢谢你的帮助!
解决方案
问题是因为您只在页面加载时阅读过offset()
元素.switch-menu-color
的。您还需要在调整页面大小时执行此操作,如下所示:
var anchor = $('.switch-menu-color').offset().top - 40,
$window = $(window);
$window.on({
'load scroll': setLinkColour,
'resize': function() {
anchor = $('.switch-menu-color').offset().top - 40;
setLinkColour();
}
});
function setLinkColour() {
$('#masthead').toggleClass('black-text', $window.scrollTop() >= anchor);
}
请注意,出于性能原因,我将load scroll
和事件分开。resize
无需重新计算offset()
页面滚动的时间,只需调整大小即可。
还要注意使用toggleClass()
带有布尔参数以使代码更简洁。
推荐阅读
- sql-server-2016 - 在 SQL Server 2016 WITH 和 OPENJSON 中使用条件来更改更新值
- react-native - React Native领域获取对象返回没有值的数组
- jdbc - 独立模式下的 SQL Server Kafka 连接器未在 kafka 中加载数据
- flutter - Flutter Firebase Messaging 仅适用于 iOS 模拟器
- python - Plotly:如何为 Scattergeo 设置手动边界框?
- android - 重新创建的活动在后按时返回首页,启动 API 28
- javascript - 如何防止元素重新渲染
- javascript - 在 jQuery 事件中使用 YouTube iFrame API
- android - 从我的应用程序将 xlsx 文件转换为 pdf 的请求发送到 Microsoft Office 或 Google 表格
- reactjs - 如何让 webview 等待令牌?