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

如何在Vanilla JS中获取相对于上一次滚动的Y轴滚动位置?

如何获取自上一次滚动以来的Y轴偏移量

嗨,这个需求其实很好实现,核心思路就是跟踪上一次的滚动位置,每次滚动触发时用当前位置减去上一次的位置,得到的就是你要的「自上一次滚动以来的偏移量」。

具体实现步骤

  • 先声明一个变量,用来保存上一次的滚动Y坐标,初始值直接设为当前的滚动位置即可:
    let lastScrollY = window.scrollY; // 和window.pageYOffset效果一致,选哪个都行
    
  • 给window添加滚动事件监听器,在回调里计算偏移差值:
    window.addEventListener('scroll', () => {
      const currentScrollY = window.scrollY;
      // 计算自上一次滚动的偏移量
      const deltaY = currentScrollY - lastScrollY;
      
      // 这里可以根据需求处理deltaY:比如打印、做滚动动画逻辑等
      console.log('自上一次滚动的Y偏移量:', deltaY);
      // 小提示:deltaY为正代表向下滚动,为负代表向上滚动
      
      // 最后一定要更新上一次的滚动位置,为下一次计算做准备
      lastScrollY = currentScrollY;
    });
    

可选优化:防抖处理

因为scroll事件触发频率极高,可能会带来不必要的性能消耗。如果你的业务逻辑不需要实时响应每一次滚动触发,可以给滚动事件加个防抖,减少回调执行次数:

let lastScrollY = window.scrollY;
let debounceTimer;

window.addEventListener('scroll', () => {
  clearTimeout(debounceTimer);
  debounceTimer = setTimeout(() => {
    const currentScrollY = window.scrollY;
    const deltaY = currentScrollY - lastScrollY;
    console.log('防抖后的Y偏移量:', deltaY);
    lastScrollY = currentScrollY;
  }, 100); // 100ms的延迟,可根据实际需求调整
});

这样就能精准拿到你需要的「自上一次滚动以来的Y轴偏移量」啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:57:32