useMescroll.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // 小程序无法在hook中使用页面级别生命周期,需单独传入: https://ask.dcloud.net.cn/question/161173
  2. // import { onPageScroll, onReachBottom, onPullDownRefresh} from '@dcloudio/uni-app';
  3. /**
  4. * 初始化mescroll, 相当于vue2的mescroll-mixins.js文件 (mescroll-body 和 mescroll-uni 通用)
  5. * mescroll-body需传入onPageScroll, onReachBottom
  6. * mescroll-uni无需传onPageScroll, onReachBottom
  7. * 当down.native为true时,需传入onPullDownRefresh
  8. */
  9. function useMescroll(onPageScroll, onReachBottom, onPullDownRefresh){
  10. // mescroll实例对象
  11. let mescroll = null;
  12. // mescroll组件初始化的回调,可获取到mescroll对象
  13. const mescrollInit = (e)=> {
  14. mescroll = e;
  15. }
  16. // 获取mescroll对象, mescrollInit执行之后会有值, 生命周期created中会有值
  17. const getMescroll = ()=>{
  18. return mescroll
  19. }
  20. // 下拉刷新的回调 (mixin默认resetUpScroll)
  21. const downCallback = ()=> {
  22. if(mescroll.optUp.use){
  23. mescroll.resetUpScroll()
  24. }else{
  25. setTimeout(()=>{
  26. mescroll.endSuccess();
  27. }, 500)
  28. }
  29. }
  30. // 上拉加载的回调
  31. const upCallback = ()=> {
  32. // mixin默认延时500自动结束加载
  33. setTimeout(()=>{
  34. mescroll.endErr();
  35. }, 500)
  36. }
  37. // 注册系统自带的下拉刷新 (配置down.native为true时生效, 还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例)
  38. onPullDownRefresh && onPullDownRefresh(() => {
  39. mescroll && mescroll.onPullDownRefresh();
  40. })
  41. // 注册列表滚动事件,用于判定在顶部可下拉刷新,在指定位置可显示隐藏回到顶部按钮 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效)
  42. onPageScroll && onPageScroll(e=>{
  43. mescroll && mescroll.onPageScroll(e);
  44. })
  45. // 注册滚动到底部的事件,用于上拉加载 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效)
  46. onReachBottom && onReachBottom(()=>{
  47. mescroll && mescroll.onReachBottom();
  48. })
  49. return {
  50. getMescroll,
  51. mescrollInit,
  52. downCallback,
  53. upCallback
  54. }
  55. }
  56. export default useMescroll