renderjs里怎么获取页面滚动位置?
我在uni-app里用renderjs想监听页面的滚动,但window.pageYOffset在renderjs里好像拿不到实时值。我试过在mounted里读取,结果一直是0,即使页面已经滚下去了。是不是renderjs不能直接访问window对象?还是说H5和App端有区别?
我的代码大概是这样的:
export default {
mounted() {
console.log(window.pageYOffset); // 始终是0
}
}
有没有办法在renderjs里正确拿到当前滚动距离?或者必须通过uni的API传参进来?
一个比较靠谱的方式是利用uni-app提供的
onPageScroll事件来获取滚动位置,并且通过props或者emit的方式把数据传递给renderjs模块。下面我给你个具体的做法。先在你的vue页面组件里这样写:
然后在你的renderjs模块里通过props接收这个值:
这样做的原因是,
onPageScroll事件是由uni-app框架专门处理滚动事件的,它能保证在合适的时机触发,并且能跨平台工作。而直接用window.pageYOffset的话,可能会因为renderjs的执行时机问题导致取到错误的值。顺便说一句,开发过程中这种跨模块的数据传递有时候挺烦人的,不过为了代码的健壮性也没办法,慢慢习惯吧。正确做法是在renderjs外部监听滚动,然后通过通信机制传进去。
普通js层这样写:
renderjs层这样接收:
另外提醒一下,renderjs的mounted只在webview加载时执行一次,所以外部持续emit进来是必须的。
如果是App端,还可以试试用plus.webview.getWebviewById().setStyle({scrollIndicator:'none'})这类API,但uni.$emit这种跨webview通信方式是最省事的。