myPull.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /**
  2. * @name 封装下拉
  3. * @params getList 刷新数据的函数
  4. * @params listData 存放数据的变量名
  5. * @params page 页数变量名
  6. */
  7. export default({getList="getList",listData="listData",page="page",initIndex="initIndex",modelData="modelData"})=> {
  8. var startPoint={}
  9. var endPoint={}
  10. return {
  11. data(){
  12. return {
  13. [listData]:[],
  14. [page]:1,
  15. [initIndex]:0,
  16. [modelData]:[
  17. {label:"测试"},
  18. {label:"测试"},
  19. {label:"测试"},
  20. ]
  21. }
  22. },
  23. onPullDownRefresh() {
  24. this.refresh();
  25. },
  26. onReachBottom() {
  27. this[getList].call(this, this[page], this.__pulldone);
  28. },
  29. methods:{
  30. refresh(){
  31. this[page]=1;
  32. this[getList].call(this, this[page], this.__pulldone);
  33. },
  34. __pulldone(data){
  35. var db = data || [];
  36. if (this[page] == 1) {
  37. this[listData] = db;
  38. } else {
  39. this[listData] = (this[listData] || []).concat(db);
  40. }
  41. uni.stopPullDownRefresh();
  42. this[page]++;
  43. },
  44. /**
  45. * @name 动态开启或关闭pulldown
  46. * @params {boolean} isOpen
  47. */
  48. setPullDown(isOpen){
  49. // #ifdef APP-PLUS
  50. const pages = getCurrentPages();
  51. const page = pages[pages.length - 1];
  52. var currentWebview = page.$getAppWebview();
  53. currentWebview.setStyle({//设置当前webview的style
  54. pullToRefresh: {
  55. support: isOpen ,
  56. style: plus.os.name === 'Android' ? 'circle' : 'default'
  57. }
  58. });
  59. // #endif
  60. },
  61. /**
  62. * @name 开始滑动
  63. */
  64. touchstart(e){
  65. startPoint={
  66. pageX:e.pageX||e.changedTouches[0].pageX,
  67. pageY:e.pageY||e.changedTouches[0].pageY,
  68. }
  69. },
  70. /**
  71. * @name 滑动结束
  72. */
  73. touchend(e){
  74. endPoint={
  75. pageX:e.mp.changedTouches[0].pageX,
  76. pageY:e.mp.changedTouches[0].pageY,
  77. }
  78. // 判断是左滑动还是右滑动 当横向位移大于10,纵向位移大于100,则判定为滑动事件
  79. var disX=endPoint.pageX-startPoint.pageX;//计算移动的位移差
  80. var disY=endPoint.pageY-startPoint.pageY;
  81. if(Math.abs(disX)>10||Math.abs(disY)>100){
  82. if(Math.abs(disX)>Math.abs(disY)){//判断是横向滑动还是纵向滑动
  83. if(disX>10){
  84. this.swiperight()//右滑
  85. };
  86. if(disX<-10){
  87. this.swipeleft()//左滑
  88. };
  89. }
  90. }
  91. },
  92. /**
  93. * @name 向左滑动
  94. */
  95. swipeleft(){
  96. if(this[initIndex]<this[modelData].length-1)this[initIndex]++
  97. console.log("左滑");
  98. },
  99. /**
  100. * @name 监听右滑
  101. */
  102. swiperight(){
  103. if(this[initIndex]>0)this[initIndex]--
  104. console.log("右滑");
  105. },
  106. }
  107. }
  108. }