【问题标题】:Scroll event listener resets scroll to top whenever I try to scroll down每当我尝试向下滚动时,滚动事件侦听器会将滚动重置到顶部
【发布时间】: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 复制的。

顺序是:

  1. body 标签的最终元素
  2. 我的 sn-p 使用脚本标签内联
  3. 来自 Google 的 main.js
  4. 谷歌分析sn-p

预期的行为是没有滚动干扰和适当的类修改,实际行为是每次尝试滚动时奇怪的滚动重置。

非常感谢任何帮助。谢谢!

【问题讨论】:

    标签: javascript html scroll


    【解决方案1】:

    看来我删除了一个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多