【发布时间】:2017-04-13 01:25:53
【问题描述】:
所以我遇到了这个非常奇怪的 javascript 问题。一切正常,我的滚动事件监听器会正确触发。但现在,在改变了一些东西之后,它似乎失败了。
具体来说,每当我尝试滚动时,我都会立即再次回到顶部。控制台中没有错误,所以我认为这不是任何形式的语法错误。这是我的 JS sn-p:
var header = document.querySelector('.Header');
var content = document.querySelector('.Hero__content');
window.addEventListener('scroll', function() {
console.log("Added listener.");
if (document.body.scrollTop > 300 && !header.classList.contains('Header--fixed')) {
console.log("Scrolled below 300.");
header.classList.add('Header--fixed');
header.classList.remove('Header--inHero');
} else if (document.body.scrollTop = 0 && header.classList.contains('Header--fixed')) {
console.log("Scrolled to top.");
header.classList.remove('Header--fixed');
header.classList.add('Header--inHero');
}
});
我添加了一些 console.log() 语句来查看发生了什么。结果是在加载时没有记录任何内容。当我尝试滚动时,它会一直记录“添加的侦听器”,所以第一个 console.log() 在那里。每次滚动它会记录很多次(尽管应该注意我使用触控板滚动,所以这可能与它被触发的次数有关)。
顺便说一句,一般的类修改行为被保留了。当我用力滚动并低于我的 300px 标记(document.body.scrollTop > 300)时,将添加该类并删除另一个类。但是,当再次位于顶部时,不会触发 else if 方法。
脚本位于我的 HTML 文件的末尾,位于结束 body 标记之前。接下来是另外两个脚本,我将按顺序为您提供:
main.js 包含 Google Web Starter 工具包的默认 JS 文件,它是一个自调用函数,执行一些离线缓存工作。该文件未被修改。它作为一个整体可用on GitHub,这样我就不必在这里复制整个东西。
另一个是 Google Analytics sn-p,它是直接从 Google 复制的。
顺序是:
- body 标签的最终元素
- 我的 sn-p 使用脚本标签内联
- 来自 Google 的 main.js
- 谷歌分析sn-p
预期的行为是没有滚动干扰和适当的类修改,实际行为是每次尝试滚动时奇怪的滚动重置。
非常感谢任何帮助。谢谢!
【问题讨论】:
标签: javascript html scroll