mixins.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // 定义在wxs (含renderjs) 逻辑层的数据和方法, 与视图层相互通信
  2. const WxsMixin = {
  3. data() {
  4. return {
  5. // 传入wxs视图层的数据 (响应式)
  6. wxsProp: {
  7. optDown:{}, // 下拉刷新的配置
  8. scrollTop:0, // 滚动条的距离
  9. bodyHeight:0, // body的高度
  10. isDownScrolling:false, // 是否正在下拉刷新中
  11. isUpScrolling:false, // 是否正在上拉加载中
  12. isScrollBody:true, // 是否为mescroll-body滚动
  13. isUpBoth:true, // 上拉加载时,是否同时可以下拉刷新
  14. t: 0 // 数据更新的标记 (只有数据更新了,才会触发wxs的Observer)
  15. },
  16. // 标记调用wxs视图层的方法
  17. callProp: {
  18. callType: '', // 方法名
  19. t: 0 // 数据更新的标记 (只有数据更新了,才会触发wxs的Observer)
  20. },
  21. // 不用wxs的平台使用此处的wxsBiz对象,抹平wxs的写法 (微信小程序和APP使用的wxsBiz对象是./wxs/wxs.wxs)
  22. // #ifndef MP-WEIXIN || MP-QQ || APP-PLUS || H5
  23. wxsBiz: {
  24. //注册列表touchstart事件,用于下拉刷新
  25. touchstartEvent: e=> {
  26. this.mescroll.touchstartEvent(e);
  27. },
  28. //注册列表touchmove事件,用于下拉刷新
  29. touchmoveEvent: e=> {
  30. this.mescroll.touchmoveEvent(e);
  31. },
  32. //注册列表touchend事件,用于下拉刷新
  33. touchendEvent: e=> {
  34. this.mescroll.touchendEvent(e);
  35. },
  36. propObserver(){}, // 抹平wxs的写法
  37. callObserver(){} // 抹平wxs的写法
  38. },
  39. // #endif
  40. // 不用renderjs的平台使用此处的renderBiz对象,抹平renderjs的写法 (app 和 h5 使用的renderBiz对象是./wxs/renderjs.js)
  41. // #ifndef APP-PLUS || H5
  42. renderBiz: {
  43. propObserver(){} // 抹平renderjs的写法
  44. }
  45. // #endif
  46. }
  47. },
  48. methods: {
  49. // wxs视图层调用逻辑层的回调
  50. wxsCall(msg){
  51. if(msg.type === 'setWxsProp'){
  52. // 更新wxsProp数据 (值改变才触发更新)
  53. this.wxsProp = {
  54. optDown: this.mescroll.optDown,
  55. scrollTop: this.mescroll.getScrollTop(),
  56. bodyHeight: this.mescroll.getBodyHeight(),
  57. isDownScrolling: this.mescroll.isDownScrolling,
  58. isUpScrolling: this.mescroll.isUpScrolling,
  59. isUpBoth: this.mescroll.optUp.isBoth,
  60. isScrollBody:this.mescroll.isScrollBody,
  61. t: Date.now()
  62. }
  63. }else if(msg.type === 'setLoadType'){
  64. // 设置inOffset,outOffset的状态
  65. this.downLoadType = msg.downLoadType
  66. // 状态挂载到mescroll对象, 以便在其他组件中使用, 比如<me-video>中
  67. this.$set(this.mescroll, 'downLoadType', this.downLoadType)
  68. // 重置是否加载成功的状态
  69. this.$set(this.mescroll, 'isDownEndSuccess', null)
  70. }else if(msg.type === 'triggerDownScroll'){
  71. // 主动触发下拉刷新
  72. this.mescroll.triggerDownScroll();
  73. }else if(msg.type === 'endDownScroll'){
  74. // 结束下拉刷新
  75. this.mescroll.endDownScroll();
  76. }else if(msg.type === 'triggerUpScroll'){
  77. // 主动触发上拉加载
  78. this.mescroll.triggerUpScroll(true);
  79. }
  80. }
  81. },
  82. mounted() {
  83. // #ifdef MP-WEIXIN || MP-QQ || APP-PLUS || H5
  84. // 配置主动触发wxs显示加载进度的回调
  85. this.mescroll.optDown.afterLoading = ()=>{
  86. this.callProp = {callType: "showLoading", t: Date.now()} // 触发wxs的方法 (值改变才触发更新)
  87. }
  88. // 配置主动触发wxs隐藏加载进度的回调
  89. this.mescroll.optDown.afterEndDownScroll = ()=>{
  90. this.callProp = {callType: "endDownScroll", t: Date.now()} // 触发wxs的方法 (值改变才触发更新)
  91. let delay = 300 + (this.mescroll.optDown.beforeEndDelay || 0)
  92. setTimeout(()=>{
  93. if(this.downLoadType === 4 || this.downLoadType === 0){
  94. this.callProp = {callType: "clearTransform", t: Date.now()} // 触发wxs的方法 (值改变才触发更新)
  95. }
  96. // 状态挂载到mescroll对象, 以便在其他组件中使用, 比如<me-video>中
  97. this.$set(this.mescroll, 'downLoadType', this.downLoadType)
  98. }, delay)
  99. }
  100. // 初始化wxs的数据
  101. this.wxsCall({type: 'setWxsProp'})
  102. // #endif
  103. }
  104. }
  105. export default WxsMixin;