Rax 里怎么监听页面滚动事件? 程序猿爱菊 提问于 2026-03-09 02:36:18 阅读 36 框架 我在 Rax 项目里想监听页面滚动,但用 window.addEventListener('scroll', ...) 好像没反应,是不是因为 Rax 跑在小程序环境里?试过在 useEffect 里加监听,也打印不出日志。 查了文档没找到对应的 API,难道得用原生小程序的 onPageScroll 吗?但这样又没法跨端了…… 我来解答 赞 18 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 爱学习的天瑞 Lv1 遇到Rax的滚动监听问题确实挺头疼的,特别是跨端场景下。我最近刚踩过这个坑,分享下解决方案。 问题核心在于Rax的运行环境判断。在Web环境下确实可以用window.addEventListener,但在小程序里window对象可能不存在或者行为不一致。Rax提供了universal-env来统一处理环境差异。 具体来说分两步解决: 1. 先用isMiniApp判断环境 2. 根据不同环境使用对应API 这是完整的实现代码: import { createElement, useEffect } from 'rax'; import { isMiniApp } from 'universal-env'; function useScroll(callback) { useEffect(() => { if (isMiniApp) { // 小程序环境 if (typeof my !== 'undefined') { my.onPageScroll = (e) => { callback({ scrollTop: e.scrollTop }); }; } // 微信小程序 else if (typeof wx !== 'undefined') { wx.onPageScroll && wx.onPageScroll(callback); } } else { // Web环境 window.addEventListener('scroll', callback); return () => window.removeEventListener('scroll', callback); } }, [callback]); } // 使用示例 function YourComponent() { useScroll((e) => { console.log('当前滚动位置:', isMiniApp ? e.scrollTop : window.scrollY); }); return <div>...</div>; } 关键点说明: - 在Web环境我们保持用传统的事件监听,记得在effect cleanup里移除监听 - 小程序环境通过判断my/wx对象来区分阿里系和微信系小程序 - 回调参数做了统一处理,通过scrollTop获取位置,这样业务代码就不用关心环境差异 实测这个方案在Web/阿里小程序/微信小程序都能正常工作。至于为什么文档没写清楚...可能是因为Rax团队觉得这属于"环境适配"范畴而不是框架核心功能吧(摊手) 补充一个细节:在小程序里onPageScroll是有触发频率限制的,如果要做节流处理建议在callback里自己加个requestAnimationFrame。 回复 点赞 1 2026-03-09 03:00 加载更多 相关推荐 2 回答 61 浏览 mpvue中如何正确监听页面滚动事件? 我在用mpvue开发微信小程序时,想监听页面的滚动事件来做懒加载,但发现直接在页面里写onScroll根本没反应。查了文档说要用scroll-view组件包裹内容并绑定@scroll事件,可这样又导致... 轩辕鹏宇 移动 2026-03-17 23:26:23 2 回答 34 浏览 Taro中如何正确监听页面滚动事件? 我在Taro开发微信小程序时,想监听页面的滚动事件,用了Taro.createSelectorQuery()和onPageScroll都不太对,页面根本没触发。 查了文档说要在页面配置里加"enabl... 子晨~ 移动 2026-03-12 13:15:19 2 回答 37 浏览 Kbone 中如何正确监听页面滚动事件? 我在用 Kbone 开发一个混合应用,想监听页面的滚动位置来做懒加载。但在小程序端绑定 scroll 事件完全没反应,H5 端倒是正常的。我试过在 mounted 里加 window.addEvent... 书生シ艳鑫 移动 2026-03-09 16:58:22 2 回答 68 浏览 Taro中如何正确监听页面滚动事件? 我在Taro开发微信小程序时,想监听页面的滚动事件,但用onScroll好像没生效,文档里也没找到明确说明。试了在页面config里加enablePullDownRefresh也不行。 这是我的代码:... 一利娟 框架 2026-03-07 14:26:20 2 回答 50 浏览 Kbone 中如何正确监听页面滚动事件? 我在用 Kbone 开发微信小程序,想监听页面的滚动位置,但 onScroll 事件好像不生效。 试过在页面根元素加 bindscroll,也试过用 window.addEventListener('... ❤俊贺 框架 2026-02-28 17:55:20 2 回答 89 浏览 字节小程序中如何正确监听页面滚动事件? 我在字节小程序里想监听页面的滚动,用了 tt.onPageScroll 但好像没触发,页面结构是普通 scroll-view 包裹内容。是不是必须用页面级滚动才行?试过在 Page 配置里加 enab... ❤露露 移动 2026-03-23 06:24:22 2 回答 61 浏览 WePY中如何正确监听页面滚动事件? 我在用 WePY 开发一个页面,想监听页面的滚动位置来做懒加载,但直接在 methods 里写 onScroll 好像没反应。查了文档说要用 wepy.page 的生命周期,但试了 onPageScr... 西门甜雅 移动 2026-03-17 14:37:21 1 回答 45 浏览 Kbone 中如何正确监听页面滚动事件? 我在用 Kbone 开发一个混合应用,想监听页面的滚动位置来做懒加载,但发现直接在 window 上监听 scroll 事件完全没反应。 试过 window.addEventListener('scr... 艳鑫🍀 移动 2026-03-15 20:21:20 1 回答 20 浏览 Rax 中怎么让 CSS 动画在小程序端正常跑起来? 我用 Rax 写了个简单的加载动画,在 Web 端跑得好好的,但一到微信小程序就完全不动了,连 transition 都没反应。是不是小程序不支持某些 CSS 属性啊? 我试过把 animation ... シ昕彤 框架 2026-03-13 17:34:24 2 回答 51 浏览 Flutter里怎么监听键盘弹起和收起事件? 我正在用Flutter做聊天页面,想在键盘弹出时自动滚动到底部,但不知道怎么监听页面键盘的显示和隐藏。网上看到有人说用MediaQuery,但我试了好像没反应。有没有类似React里那种onFocus... 闲人书錦 移动 2026-03-11 23:17:19
问题核心在于Rax的运行环境判断。在Web环境下确实可以用
window.addEventListener,但在小程序里window对象可能不存在或者行为不一致。Rax提供了universal-env来统一处理环境差异。具体来说分两步解决:
1. 先用
isMiniApp判断环境2. 根据不同环境使用对应API
这是完整的实现代码:
关键点说明:
- 在Web环境我们保持用传统的事件监听,记得在effect cleanup里移除监听
- 小程序环境通过判断my/wx对象来区分阿里系和微信系小程序
- 回调参数做了统一处理,通过scrollTop获取位置,这样业务代码就不用关心环境差异
实测这个方案在Web/阿里小程序/微信小程序都能正常工作。至于为什么文档没写清楚...可能是因为Rax团队觉得这属于"环境适配"范畴而不是框架核心功能吧(摊手)
补充一个细节:在小程序里onPageScroll是有触发频率限制的,如果要做节流处理建议在callback里自己加个
requestAnimationFrame。