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

如何用纯JS实现滚动向下添加类、向上移除类?

纯JavaScript实现滚动时动态添加/移除元素类名

当然可以用纯JavaScript实现这个需求,核心思路是监听滚动事件,对比当前与上一次的滚动位置判断滚动方向,再用原生API操作元素类名。

基础实现代码

// 获取需要操作的目标元素(替换成你的选择器)
const targetElement = document.querySelector('.your-target-element');
// 记录上一次的滚动位置
let lastScrollTop = 0;

// 监听页面滚动事件
window.addEventListener('scroll', () => {
    // 获取当前滚动位置(兼容不同浏览器)
    const currentScrollTop = window.pageYOffset || document.documentElement.scrollTop;

    if (currentScrollTop > lastScrollTop) {
        // 向下滚动:添加目标类,移除反向类(可选)
        targetElement.classList.add('scrolled-down');
        targetElement.classList.remove('scrolled-up');
    } else {
        // 向上滚动:移除目标类,添加反向类(可选)
        targetElement.classList.remove('scrolled-down');
        targetElement.classList.add('scrolled-up');
    }

    // 更新上一次滚动位置,为下一次判断做准备
    lastScrollTop = currentScrollTop;
});

关键细节说明

  • window.pageYOffset 和 document.documentElement.scrollTop 结合使用,是为了兼容所有现代浏览器,确保能正确获取滚动距离
  • classList.add()/classList.remove() 是原生JS安全操作类名的方法,不会覆盖元素已有的其他类名,比直接修改className更可靠
  • 如果你不需要区分向上滚动的类,可以只保留添加/移除目标类的逻辑

优化:添加防抖减少性能消耗

滚动事件会频繁触发,给事件回调加防抖可以避免过多不必要的DOM操作,提升页面性能:

const targetElement = document.querySelector('.your-target-element');
let lastScrollTop = 0;
let scrollTimer = null;

window.addEventListener('scroll', () => {
    // 清除之前的定时器
    clearTimeout(scrollTimer);
    // 100ms后执行逻辑(可根据需求调整延迟时间)
    scrollTimer = setTimeout(() => {
        const currentScrollTop = window.pageYOffset || document.documentElement.scrollTop;
        
        if (currentScrollTop > lastScrollTop) {
            targetElement.classList.add('scrolled-down');
            targetElement.classList.remove('scrolled-up');
        } else {
            targetElement.classList.remove('scrolled-down');
            targetElement.classList.add('scrolled-up');
        }
        
        lastScrollTop = currentScrollTop;
    }, 100);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:12:53