// 小程序无法在hook中使用页面级别生命周期,需单独传入: https://ask.dcloud.net.cn/question/161173 // import { onPageScroll, onReachBottom, onPullDownRefresh} from '@dcloudio/uni-app'; /** * 初始化mescroll, 相当于vue2的mescroll-mixins.js文件 (mescroll-body 和 mescroll-uni 通用) * mescroll-body需传入onPageScroll, onReachBottom * mescroll-uni无需传onPageScroll, onReachBottom * 当down.native为true时,需传入onPullDownRefresh */ function useMescroll(onPageScroll, onReachBottom, onPullDownRefresh){ // mescroll实例对象 let mescroll = null; // mescroll组件初始化的回调,可获取到mescroll对象 const mescrollInit = (e)=> { mescroll = e; } // 获取mescroll对象, mescrollInit执行之后会有值, 生命周期created中会有值 const getMescroll = ()=>{ return mescroll } // 下拉刷新的回调 (mixin默认resetUpScroll) const downCallback = ()=> { if(mescroll.optUp.use){ mescroll.resetUpScroll() }else{ setTimeout(()=>{ mescroll.endSuccess(); }, 500) } } // 上拉加载的回调 const upCallback = ()=> { // mixin默认延时500自动结束加载 setTimeout(()=>{ mescroll.endErr(); }, 500) } // 注册系统自带的下拉刷新 (配置down.native为true时生效, 还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) onPullDownRefresh && onPullDownRefresh(() => { mescroll && mescroll.onPullDownRefresh(); }) // 注册列表滚动事件,用于判定在顶部可下拉刷新,在指定位置可显示隐藏回到顶部按钮 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效) onPageScroll && onPageScroll(e=>{ mescroll && mescroll.onPageScroll(e); }) // 注册滚动到底部的事件,用于上拉加载 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效) onReachBottom && onReachBottom(()=>{ mescroll && mescroll.onReachBottom(); }) return { getMescroll, mescrollInit, downCallback, upCallback } } export default useMescroll