讲师中心 微信公众号
AI工具推荐 视频效率加速

uni-app页面滚动监听 uni-app如何获取页面滚动距离

浅宇姑娘_2075

浅宇姑娘_2075

发布时间:2026-03-20 17:45:35

|

124人浏览过

|

来源于php中文网

原创

uni-app 页面滚动监听必须使用 onPageScroll 生命周期钩子,而非 scroll-view 的 @scroll 事件;其参数为 { scrollTop }(单位 px,恒为正),在 App、微信小程序、H5 可用,但支付宝小程序不支持,且受页面根容器可滚动性及样式(如 overflow: hidden)影响。

uni-app页面滚动监听 uni-app如何获取页面滚动距离

uni-app 页面滚动监听用 onPageScroll,不是 scroll-view 的事件

很多人一上来就给 scroll-view 加 @scroll,结果发现页面整体滚动(比如下拉刷新、长列表滚动)根本触发不了——因为那是组件内滚动,而「页面滚动距离」通常指整个页面的 scrollTop,必须用生命周期钩子。

uni-app 的页面级滚动监听只靠 onPageScroll,它在 App、微信小程序、H5 都可用,但注意:支付宝小程序不支持,且仅在页面根容器可滚动时才触发(比如内容超出一屏)。

  • onPageScroll 参数是 { scrollTop },单位为 px,值为正整数,不会为负
  • 它在滚动中高频触发,别在里面直接调 this.setData 或执行重操作,容易卡顿
  • H5 端会受 body 或 page 容器样式影响,若设置了 overflow: hidden,onPageScroll 就不触发

为什么 uni.createSelectorQuery() 拿不到页面滚动距离

有人想用查询 API 去读 document.scrollingElement.scrollTop,这在 H5 可行,但在小程序里根本没 document,uni.createSelectorQuery 也查不到页面根滚动容器——它只查组件节点,而页面滚动容器不属于任何组件树。

强行在小程序里模拟会导致兼容性断裂,比如:App 端返回的是 WebView 内部 scrollY,但不同平台 WebView 实现不一致;微信小程序里甚至无法访问原生滚动对象。

  • 不要尝试用 uni.createSelectorQuery().selectViewport() 获取滚动位置,它在多数平台返回 null
  • 不要在 mounted 或 onReady 里预读 scrollTop,页面还没开始滚动,这个值恒为 0
  • 如果真需要初始化时的滚动位置(比如恢复上次位置),应从 onLoad 参数或本地缓存读,而非实时查询

onPageScroll 在不同平台的精度和延迟差异

这个函数不是每像素触发一次。微信小程序约 16ms 一次(接近 60fps),App 端取决于 WebView 性能,H5 则依赖浏览器的 scroll 事件节流策略——这意味着快速滑动时你收到的 scrollTop 是离散的、有跳跃的。

如果你要做吸顶、视差或滚动进度条,不能假设数据连续,得自己做简单平滑处理,比如用上一次值做插值,或加个防抖判断方向。

  • 快速滚动时,scrollTop 可能跳变 20–50px,尤其低端安卓机
  • iOS 微信里偶尔首帧 scrollTop 为 0,哪怕页面已滚动,建议忽略前 1–2 次回调
  • App 端若开启 renderMode: "webview",滚动监听更稳定;用 "subNVue" 模式则可能失效

监听失效的三个典型配置坑

写了 onPageScroll 却没反应?大概率栽在这几个地方。

  • 页面 JSON 配置里写了 "disableScroll": true —— 这个开关会彻底禁用页面滚动,onPageScroll 自然不触发
  • 页面根元素(<view class="container">)设置了 height: 100vh 但没设 overflow-y: auto,导致内容被裁剪却不滚动
  • 使用了 uni-nav-bar + statusBar 且未适配安全区,某些 iOS 机型下页面实际可滚动区域变小,scrollTop 增长缓慢甚至卡住

最简单的验证方式:手动拖动页面,打开调试器,在 onPageScroll 里打个 console.log,看有没有输出——没有输出,先查配置和样式,别急着改逻辑。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2583

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5583

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6590

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6258

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

883

2024.05.22

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2940

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

360

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2773

2023.11.15

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn