前端JavaScript 项目中 获取当前页面滚动位置

在前端 JavaScript 项目中,获取当前页面滚动位置 是一个非常常见的需求(如:懒加载、吸顶、返回顶部、埋点统计等)。下面按推荐程度 + 兼容性做一个清晰总结 👇


✅ 一、最推荐(现代浏览器)

复制代码
const scrollTop = window.scrollY;
const scrollLeft = window.scrollX;
  • scrollY:页面垂直滚动距离

  • scrollX:页面水平滚动距离

📌 优点

  • 语义清晰

  • 所有现代浏览器都支持

  • 优先使用


✅ 二、兼容写法(处理不同浏览器)

复制代码
const scrollTop =
  window.pageYOffset ||
  document.documentElement.scrollTop ||
  document.body.scrollTop ||
  0;

📌 说明

  • pageYOffsetscrollY

  • 主要用于兼容极老浏览器(IE)


⚠️ 三、不要单独用的写法

复制代码
document.body.scrollTop
document.documentElement.scrollTop

原因:

  • 取决于浏览器和文档模式

  • 有时为 0

  • 单独用不可靠


✅ 四、监听滚动事件获取实时位置

复制代码
window.addEventListener('scroll', () => {
  const scrollTop = window.scrollY;
  console.log(scrollTop);
});

⚠️ 注意:scroll 事件触发非常频繁


🚀 五、推荐:节流(Throttle)处理

复制代码
let ticking = false;

window.addEventListener('scroll', () => {
  if (!ticking) {
    window.requestAnimationFrame(() => {
      console.log(window.scrollY);
      ticking = false;
    });
    ticking = true;
  }
});

✔ 性能友好

✔ 适合动画、吸顶、监听滚动进度


📦 六、获取某个元素的滚动位置

复制代码
const el = document.querySelector('.container');

console.log(el.scrollTop);   // 垂直滚动
console.log(el.scrollLeft);  // 水平滚动

适用于:

  • 自定义滚动容器

  • 弹窗

  • 表格、列表容器


🧠 七、判断页面滚动到底部

复制代码
const isBottom =
  window.innerHeight + window.scrollY >= document.body.offsetHeight;

if (isBottom) {
  console.log('滚动到底部了');
}

✅ 八、总结(直接记住)

场景 推荐写法
当前页面滚动位置 window.scrollY
兼容老浏览器 `window.pageYOffset
元素滚动 element.scrollTop
实时监听 scroll + requestAnimationFrame
相关推荐
AwesomeCPA15 小时前
Miaoduo MCP 使用指南(VDI内网环境)
前端·ui·ai编程
前端大波15 小时前
前端面试通关包(2026版,完整版)
前端·面试·职场和发展
qq_4335021815 小时前
Codex cli 飞书文档创建进阶实用命令 + Skill 创建&使用 小白完整教程
java·前端·飞书
IT_陈寒16 小时前
为什么我的Vite热更新老是重新加载整个页面?
前端·人工智能·后端
还在忙碌的吴小二16 小时前
Harness 最佳实践:Java Spring Boot 项目落地 OpenSpec + Claude Code
java·开发语言·spring boot·后端·spring
liliangcsdn16 小时前
mstsc不在“C:\Windows\System32“下在C:\windows\WinSxS\anmd64xxx“问题分析
开发语言·windows
一袋米扛几楼9816 小时前
【网络安全】SIEM -Security Information and Event Management 工具是什么?
前端·安全·web安全
小陈工16 小时前
2026年4月7日技术资讯洞察:下一代数据库融合、AI基础设施竞赛与异步编程实战
开发语言·前端·数据库·人工智能·python