判断页面滚动方向的方法

方法一:使用变量记录上次滚动位置

let 复制代码
window.addEventListener('scroll', function() {
  const currentScroll = window.pageYOffset || document.documentElement.scrollTop;
  
  if (currentScroll > lastScrollTop) {
    // 向下滚动
    console.log('向下滚动');
  } else if (currentScroll < lastScrollTop) {
    // 向上滚动
    console.log('向上滚动');
  }
  
  lastScrollTop = currentScroll <= 0 ? 0 : currentScroll;
}, false);

方法二:使用更精确的 delta 值判断

let 复制代码
window.addEventListener('scroll', function() {
  const currentScrollPosition = window.pageYOffset;
  const scrollDelta = currentScrollPosition - lastScrollPosition;
  
  if (scrollDelta > 0) {
    console.log('向下滚动', scrollDelta);
  } else if (scrollDelta < 0) {
    console.log('向上滚动', scrollDelta);
  }
  
  lastScrollPosition = currentScrollPosition;
});

方法三:使用 requestAnimationFrame 优化性能

let 复制代码
let ticking = false;

window.addEventListener('scroll', function() {
  lastKnownScrollPosition = window.scrollY;
  
  if (!ticking) {
    window.requestAnimationFrame(function() {
      const current = lastKnownScrollPosition;
      const direction = current > (lastKnownScrollPosition || 0) ? 'down' : 'up';
      console.log(direction);
      ticking = false;
    });
    
    ticking = true;
  }
});
相关推荐
小金鱼Y31 分钟前
别再乱拷贝了!JS 浅拷贝 vs 深拷贝全解析
前端·javascript
英俊潇洒美少年1 小时前
React19 useActionState的注意事项
前端·javascript·react.js
发现一只大呆瓜1 小时前
性能优化:CDN 缓存加速与调度原理
前端·javascript·面试
Lsx-codeShare2 小时前
前端发版后页面白屏?一套解决用户停留旧页面问题的完整方案
前端·javascript·前端框架·vue·vite
心柠2 小时前
TypeScript的知识梳理
前端·javascript·typescript
ivwsjc2 小时前
vue3 echarts地图点到点之间的飞线图
前端·javascript·vue·echarts
小李子呢02113 小时前
JS中的Set 核心认知
前端·javascript·es6
进击的尘埃3 小时前
深入探究 React Hooks 你一直在写却从未写对的最佳实践
javascript
coder_Eight3 小时前
吃透JS深拷贝:从原理到实战(含Symbol全场景+性能对比)
javascript
程序员阿峰3 小时前
【JavaScript面试题-this 绑定】请说明 `this` 在不同场景下的指向(默认、隐式、显式、new、箭头函数)。
前端·javascript·面试