自定义组件如何优雅的监听页面的滚动事件?

小程序 文章 2021-03-04 21:01 678 0 全屏看文

AI助手支持GPT4.0

自定义组件如何优雅的监听页面的滚动事件?How can custom components listen to page scroll events gracefully?

自定义组件如何优雅的监听页面的滚动事件?

如题,请各位集思广益,谢谢!

If the title, please brainstorm, thank you!

回答:

青团社-郝帅:

做个广播吧。。。

|G.XIAO|:

1.封装一个BasePage,BasePage 支持 onPageScroll 事情,默认不支持订阅。

2.页面继承 BasePage,需要监听滚动的就进行订阅。

相当于每个页面都具备这样的能力,如果需要直接订阅,不需要就不订阅

ThenMorning:嗯  谢谢回复    确实这样   basepage抽出了监听滚动的工作,但是自定义组件获取页面滚动状态的工作还是没有抽象复用
|G.XIAO|:这个不是页面维度的滚动了,那建议自定义搞一个scrollview 组件,不用onPageScroll 事情了。需要页面需要用到滚动,都使用 scrollview 组件包一层
ThenMorning:如此的话,成本又太高了,我现在就需要一个小程序的黑魔法😂😂😂
|G.XIAO|:爱莫能助 哈哈,加油
Jhou旭:

正好我最近也在做类似的案例,先说一下我的做法:

首先在父页面中使用:onPageScroll()监听滚动的时间,

然后在父页面定义一个状态,将onPageScroll()事件中获取到的数据setDate给刚定义的状态,

其次在父页面wxml中传值给子组件

最后在子组件接收传递过来的数据就可以了。

当父页面发生滚动的时候触发状态的更新,从而使传递到子组件的数据也回跟着更新,通过这个数据的变动可以得知父组件触发了滚动。

简单点来说就是:监听父页面的滚动状态,使用数据设置给父页面的状态中(可以是距离页面顶部的距离:e.scrollTop),通过父传子参数,在子组件接收这个参数,并且监听这个参数是否发生了变化即可。

(下图的是,子组件接收父页面参数的写法,observer是检测参数是否发生变化的事件)。


我的思路大致是这样,希望能够帮助到你。

ThenMorning:谢谢你的回复,这个思路我想过,现在想要的就是优雅点的
|G.XIAO|:你的把你的优雅点给个定义,还有应用场景。这样全靠猜
ThenMorning:对页面来说成本低,对线上影响小,可扩展性高
|G.XIAO|:如果官方自定义组件支持就OK了,这样是最优雅的
ThenMorning:那确实  哈哈哈
ThenMorning:自定义组件掣肘的地方太多了
|G.XIAO|:封装一个BaseComponent即可
|G.XIAO|:封装一个,别直接裸奔使用自定义组件和原生API

-EOF-

AI助手支持GPT4.0