如何使用 Vanilla Javascript 检测元素的 scrollTop?

How can I detect the scrollTop of an element using Vanilla Javascript?

我想在用户从元素顶部滚动超过 100 像素时向该元素添加一个 class,但我似乎在页面加载后立即触发它。这是我现在的代码

const content = document.getElementById("content");
document.addEventListener("scroll", () => {
  content.classList.add(
    'curtain-in',
    content.scrollTop > 100
  );
});

还有你的回答,请你解释一下我哪里出错了。 提前谢谢你

I want to add a class to an element when the user scrolls more than 100px from the top of the element

您应该将 addEventListener 添加到 content 而不是 document

const content = document.getElementById("content");
content.addEventListener("scroll", () => {
  console.log('class added');
  content.classList.add(
    'curtain-in',
    content.scrollTop >= 100
  );
});
#content {
  height: 200px;
  width: 200px;
  overflow: scroll;
}

p {
  height: 1000px;
}
<div id="content">
  <p></p>
</div>

也许正在发生的事情是 content.scrollTop 总是返回 0 而你的条件永远不会满足。我一直在努力解决这个问题,试图制作一个 fiddle 来测试你的案例。

要检查滚动是否已经超过元素的开头加上 100px,我们需要知道元素从哪里开始以及滚动的新位置,我们可以像这样获得这两个值:

var position = content.offsetTop;
var scrolled = document.scrollingElement.scrollTop;

有了这些,您可以在事件函数中执行类似这样的操作:

const content = document.getElementById("content");
document.addEventListener("scroll", (e) => {

  var scrolled = document.scrollingElement.scrollTop;
  var position = content.offsetTop;

  if(scrolled > position + 100){
    content.classList.add(
      'curtain-in');
    }
});

这是 fiddle:https://jsfiddle.net/cvmw3L1o/1/