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

iPhone端调用$('body').scrollTop()返回0,请问问题出在哪?

iPhone中获取滚动位置返回0的原因及解决方案

这个问题我之前调试iOS Safari页面时也碰到过,核心原因和iOS Safari的滚动机制有关:

问题根源

在iPhone的Safari浏览器里,整个页面的滚动容器并不是<body>元素,而是绑定在window对象或者document.documentElement(也就是<html>标签对应的DOM元素)上的。

桌面端浏览器通常允许<body>作为滚动容器,但iOS Safari的渲染引擎把页面滚动的上下文挂载到了文档根节点或window上,所以直接读取document.body.scrollTop或者$('body').scrollTop()自然会返回0——因为<body>本身并没有承担滚动的职责。

解决方案

根据你使用的是原生JS还是jQuery,分别有对应的正确写法:

1. 原生JavaScript方案

推荐使用标准的window.pageYOffset属性,它在所有现代浏览器(包括iOS Safari)中都能稳定获取页面滚动位置,兼容性最好:

const currentScroll = window.pageYOffset;
console.log('当前滚动位置:', currentScroll);

如果需要兼容更旧的浏览器,可以加上降级方案:

const currentScroll = window.pageYOffset || document.documentElement.scrollTop;

2. jQuery方案

直接对window对象调用scrollTop()方法即可,jQuery内部已经处理了不同浏览器的兼容性差异:

const currentScroll = $(window).scrollTop();
console.log('当前滚动位置:', currentScroll);

额外提醒

如果是页面内自定义滚动容器(比如某个设置了overflow: scroll的<div>),那还是需要针对该容器元素调用scrollTop();但如果是整个页面的滚动,一定要以window或document.documentElement为目标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:40:07