判断页面滚动方向的方法

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

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;
  }
});
相关推荐
Enti7c4 分钟前
如何编写JavaScript插件
javascript
肠胃炎1 小时前
认识Vue
前端·javascript·vue.js
sunbyte1 小时前
Three.js + React 实战系列-3D 个人主页 :完成 Navbar 导航栏组件
开发语言·javascript·react.js
博越1 小时前
vue实现日历(仿钉钉考勤日历)
前端·javascript
海底火旺1 小时前
两种思路的碰撞:从超时分层法到高效双指针的蜕变
前端·javascript·算法
江城开朗的豌豆1 小时前
Vue + Node.js 实现埋点功能方案
前端·javascript·架构
JustHappy1 小时前
「软件设计模式杂谈🤔」和后端吵架失败了,于是乎我写了个适配器模式
前端·javascript·设计模式
多多米10052 小时前
Vue3项目自定义全局防抖节流
前端·javascript·vue.js·typescript
b哦哈嘻w3 小时前
Table类型的表单
开发语言·javascript·ecmascript
Mintopia3 小时前
Nodejs第四天,身份认证
前端·javascript·node.js