You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Vanilla JavaScript检测元素scrollTop?代码触发异常排查

解决元素滚动超过100px才添加类名的问题

咱们先聊聊你代码里的几个问题,这就是为啥页面一加载就触发添加类的原因:

  • classList.add的用法错误:classList.add()只接受类名字符串作为参数,你写的content.classList.add( 'curtain-in', content.scrollTop > 100 )其实是把'curtain-in'和布尔值(转成字符串'true'或'false')都当成类名添加了,不管滚动距离多少,'curtain-in'都会被直接加上,这就是页面一加载就有这个类的原因。

  • 监听了错误的滚动事件:你监听的是document的滚动事件,但你要判断的是content这个元素自身的scrollTop,如果content是一个可滚动的容器(比如设置了overflow: auto),那应该监听content自己的scroll事件,而不是整个文档的。

接下来分两种场景给你修正后的代码:

场景1:content是自带滚动条的容器

如果content是一个内部可滚动的元素(比如设置了overflow: auto且内容超出容器高度),那我们需要监听它自身的滚动事件,判断它的scrollTop值:

const content = document.getElementById("content");

// 监听content自身的滚动事件
content.addEventListener("scroll", () => {
  // 滚动距离超过100px时添加类,否则移除
  if (content.scrollTop > 100) {
    content.classList.add('curtain-in');
  } else {
    content.classList.remove('curtain-in');
  }
});

想要更简洁的写法,可以用classList.toggle()的第二个参数(布尔值)来控制类的添加/移除:

const content = document.getElementById("content");

content.addEventListener("scroll", () => {
  // 第二个参数为true时添加类,false时移除
  content.classList.toggle('curtain-in', content.scrollTop > 100);
});

场景2:滚动的是整个页面(window)

如果你的需求是当整个页面滚动超过100px时,给content元素添加类,那应该用window.scrollY(或document.documentElement.scrollTop)来判断页面的滚动距离,而不是content的scrollTop:

const content = document.getElementById("content");

// 监听窗口的滚动事件
window.addEventListener("scroll", () => {
  content.classList.toggle('curtain-in', window.scrollY > 100);
});

最后再补充个知识点:scrollTop是针对可滚动元素自身的滚动距离,只有当元素设置了overflow: auto/scroll且内容超出容器时,这个值才会大于0;而window.scrollY是整个页面的垂直滚动距离。

内容的提问来源于stack exchange,提问作者DumbDevGirl42069

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:07:16