app-wxs.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. var __wxsModules={};
  2. __wxsModules["30f4e25a"] = (() => {
  3. var __getOwnPropNames = Object.getOwnPropertyNames;
  4. var __commonJS = (cb, mod) => function __require() {
  5. return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
  6. };
  7. // <stdin>
  8. var require_stdin = __commonJS({
  9. "<stdin>"(exports, module) {
  10. var me = {};
  11. me.onMoving = function(ins, rate, downHight) {
  12. ins.requestAnimationFrame(function() {
  13. ins.selectComponent(".mescroll-wxs-content").setStyle({
  14. "will-change": "transform",
  15. // 可解决下拉过程中, image和swiper脱离文档流的问题
  16. "transform": "translateY(" + downHight + "px)",
  17. "transition": ""
  18. });
  19. var progress = ins.selectComponent(".mescroll-wxs-progress");
  20. progress && progress.setStyle({ transform: "rotate(" + 360 * rate + "deg)" });
  21. });
  22. };
  23. me.showLoading = function(ins) {
  24. me.downHight = me.optDown.offset;
  25. ins.requestAnimationFrame(function() {
  26. ins.selectComponent(".mescroll-wxs-content").setStyle({
  27. "will-change": "auto",
  28. "transform": "translateY(" + me.downHight + "px)",
  29. "transition": "transform 300ms"
  30. });
  31. });
  32. };
  33. me.endDownScroll = function(ins) {
  34. me.downHight = 0;
  35. me.isDownScrolling = false;
  36. ins.requestAnimationFrame(function() {
  37. ins.selectComponent(".mescroll-wxs-content").setStyle({
  38. "will-change": "auto",
  39. "transform": "translateY(0)",
  40. // 不可以写空串,否则scroll-view渲染不完整 (延时350ms会调clearTransform置空)
  41. "transition": "transform 300ms"
  42. });
  43. });
  44. };
  45. me.clearTransform = function(ins) {
  46. ins.requestAnimationFrame(function() {
  47. ins.selectComponent(".mescroll-wxs-content").setStyle({
  48. "will-change": "",
  49. "transform": "",
  50. "transition": ""
  51. });
  52. });
  53. };
  54. function propObserver(wxsProp) {
  55. if (!wxsProp)
  56. return;
  57. me.optDown = wxsProp.optDown;
  58. me.scrollTop = wxsProp.scrollTop;
  59. me.bodyHeight = wxsProp.bodyHeight;
  60. me.isDownScrolling = wxsProp.isDownScrolling;
  61. me.isUpScrolling = wxsProp.isUpScrolling;
  62. me.isUpBoth = wxsProp.isUpBoth;
  63. me.isScrollBody = wxsProp.isScrollBody;
  64. me.startTop = wxsProp.scrollTop;
  65. }
  66. function callObserver(callProp, oldValue, ins) {
  67. if (me.disabled())
  68. return;
  69. if (callProp.callType) {
  70. if (callProp.callType === "showLoading") {
  71. me.showLoading(ins);
  72. } else if (callProp.callType === "endDownScroll") {
  73. me.endDownScroll(ins);
  74. } else if (callProp.callType === "clearTransform") {
  75. me.clearTransform(ins);
  76. }
  77. }
  78. }
  79. function touchstartEvent(e, ins) {
  80. me.downHight = 0;
  81. me.startPoint = me.getPoint(e);
  82. me.startTop = me.getScrollTop();
  83. me.startAngle = 0;
  84. me.lastPoint = me.startPoint;
  85. me.maxTouchmoveY = me.getBodyHeight() - me.optDown.bottomOffset;
  86. me.inTouchend = false;
  87. me.callMethod(ins, { type: "setWxsProp" });
  88. }
  89. function touchmoveEvent(e, ins) {
  90. var isPrevent = true;
  91. if (me.disabled())
  92. return isPrevent;
  93. var scrollTop = me.getScrollTop();
  94. var curPoint = me.getPoint(e);
  95. var moveY = curPoint.y - me.startPoint.y;
  96. if (moveY > 0 && (me.isScrollBody && scrollTop <= 0 || !me.isScrollBody && (scrollTop <= 0 || scrollTop <= me.optDown.startTop && scrollTop === me.startTop))) {
  97. if (!me.inTouchend && !me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || me.isUpScrolling && me.isUpBoth)) {
  98. if (!me.startAngle)
  99. me.startAngle = me.getAngle(me.lastPoint, curPoint);
  100. if (me.startAngle < me.optDown.minAngle)
  101. return isPrevent;
  102. if (me.maxTouchmoveY > 0 && curPoint.y >= me.maxTouchmoveY) {
  103. me.inTouchend = true;
  104. touchendEvent(e, ins);
  105. return isPrevent;
  106. }
  107. isPrevent = false;
  108. var diff = curPoint.y - me.lastPoint.y;
  109. if (me.downHight < me.optDown.offset) {
  110. if (me.movetype !== 1) {
  111. me.movetype = 1;
  112. me.callMethod(ins, { type: "setLoadType", downLoadType: 1 });
  113. me.isMoveDown = true;
  114. }
  115. me.downHight += diff * me.optDown.inOffsetRate;
  116. } else {
  117. if (me.movetype !== 2) {
  118. me.movetype = 2;
  119. me.callMethod(ins, { type: "setLoadType", downLoadType: 2 });
  120. me.isMoveDown = true;
  121. }
  122. if (diff > 0) {
  123. me.downHight += diff * me.optDown.outOffsetRate;
  124. } else {
  125. me.downHight += diff;
  126. }
  127. }
  128. me.downHight = Math.round(me.downHight);
  129. var rate = me.downHight / me.optDown.offset;
  130. me.onMoving(ins, rate, me.downHight);
  131. }
  132. }
  133. me.lastPoint = curPoint;
  134. return isPrevent;
  135. }
  136. function touchendEvent(e, ins) {
  137. if (me.isMoveDown) {
  138. if (me.downHight >= me.optDown.offset) {
  139. me.downHight = me.optDown.offset;
  140. me.callMethod(ins, { type: "triggerDownScroll" });
  141. } else {
  142. me.downHight = 0;
  143. me.callMethod(ins, { type: "endDownScroll" });
  144. }
  145. me.movetype = 0;
  146. me.isMoveDown = false;
  147. } else if (!me.isScrollBody && me.getScrollTop() === me.startTop) {
  148. var isScrollUp = me.getPoint(e).y - me.startPoint.y < 0;
  149. if (isScrollUp) {
  150. var angle = me.getAngle(me.getPoint(e), me.startPoint);
  151. if (angle > 80) {
  152. me.callMethod(ins, { type: "triggerUpScroll" });
  153. }
  154. }
  155. }
  156. me.callMethod(ins, { type: "setWxsProp" });
  157. }
  158. me.disabled = function() {
  159. return !me.optDown || !me.optDown.use || me.optDown.native;
  160. };
  161. me.getPoint = function(e) {
  162. if (!e) {
  163. return { x: 0, y: 0 };
  164. }
  165. if (e.touches && e.touches[0]) {
  166. return { x: e.touches[0].pageX, y: e.touches[0].pageY };
  167. } else if (e.changedTouches && e.changedTouches[0]) {
  168. return { x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY };
  169. } else {
  170. return { x: e.clientX, y: e.clientY };
  171. }
  172. };
  173. me.getAngle = function(p1, p2) {
  174. var x = Math.abs(p1.x - p2.x);
  175. var y = Math.abs(p1.y - p2.y);
  176. var z = Math.sqrt(x * x + y * y);
  177. var angle = 0;
  178. if (z !== 0) {
  179. angle = Math.asin(y / z) / Math.PI * 180;
  180. }
  181. return angle;
  182. };
  183. me.getScrollTop = function() {
  184. return me.scrollTop || 0;
  185. };
  186. me.getBodyHeight = function() {
  187. return me.bodyHeight || 0;
  188. };
  189. me.callMethod = function(ins, param) {
  190. if (ins)
  191. ins.callMethod("wxsCall", param);
  192. };
  193. module.exports = {
  194. propObserver,
  195. callObserver,
  196. touchstartEvent,
  197. touchmoveEvent,
  198. touchendEvent
  199. };
  200. }
  201. });
  202. return require_stdin();
  203. })();