mobile.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. import { rowLocation, colLocation, mouseposition } from '../global/location';
  2. import { selectHightlightShow } from './select';
  3. import menuButton from './menuButton';
  4. import luckysheetFreezen from './freezen';
  5. import Store from '../store';
  6. //设备是移动端
  7. export default function mobileinit(){
  8. //去除滚动条
  9. Store.cellMainSrollBarSize = 0;
  10. //滑动滚动表格
  11. let luckysheet_touchmove_status = false,
  12. luckysheet_touchmove_startPos = {},
  13. luckysheet_touchhandle_status = false,
  14. _scrollTimer = null;
  15. $(document).on("touchstart", "#luckysheet-grid-window-1", function(event){
  16. clearInterval(_scrollTimer);//clear timer
  17. luckysheet_touchmove_status = true;
  18. let touch = event.originalEvent.targetTouches[0];
  19. luckysheet_touchmove_startPos = {
  20. x: touch.pageX,
  21. y: touch.pageY,
  22. vy:0, //vy可以理解为滑动的力度
  23. moveType:"y",
  24. }
  25. })
  26. $(document).on("touchmove", "#luckysheet-grid-window-1", function(event){
  27. if(event.originalEvent.targetTouches.length > 1 || (event.scale && event.scale !== 1)){
  28. return;
  29. }
  30. let touch = event.originalEvent.targetTouches[0];
  31. if(luckysheet_touchmove_status){//滚动
  32. let slideX = touch.pageX - luckysheet_touchmove_startPos.x;
  33. let slideY = touch.pageY - luckysheet_touchmove_startPos.y;
  34. luckysheet_touchmove_startPos.x = touch.pageX;
  35. luckysheet_touchmove_startPos.y = touch.pageY;
  36. let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft();
  37. let scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
  38. // console.log("start",scrollTop, slideY,touch.pageY);
  39. scrollLeft -= slideX;
  40. scrollTop -= slideY;
  41. // console.log(touch,touch.pageY, luckysheet_touchmove_startPos.y, slideY);
  42. if(scrollLeft < 0){
  43. scrollLeft = 0;
  44. }
  45. if(scrollTop < 0){
  46. scrollTop = 0;
  47. }
  48. $("#luckysheet-scrollbar-y").scrollTop(scrollTop);
  49. luckysheet_touchmove_startPos.vy_y = slideY;
  50. luckysheet_touchmove_startPos.scrollTop = scrollTop;
  51. $("#luckysheet-scrollbar-x").scrollLeft(scrollLeft);
  52. luckysheet_touchmove_startPos.vy_x = slideX;
  53. luckysheet_touchmove_startPos.scrollLeft = scrollLeft;
  54. }
  55. else if(luckysheet_touchhandle_status){//选区
  56. let mouse = mouseposition(touch.pageX, touch.pageY);
  57. let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
  58. let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
  59. let row_location = rowLocation(y),
  60. row = row_location[1],
  61. row_pre = row_location[0],
  62. row_index = row_location[2];
  63. let col_location = colLocation(x),
  64. col = col_location[1],
  65. col_pre = col_location[0],
  66. col_index = col_location[2];
  67. let last = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]);
  68. let top = 0, height = 0, rowseleted = [];
  69. if (last.top > row_pre) {
  70. top = row_pre;
  71. height = last.top + last.height - row_pre;
  72. if(last.row[1] > last.row_focus){
  73. last.row[1] = last.row_focus;
  74. }
  75. rowseleted = [row_index, last.row[1]];
  76. }
  77. else if (last.top == row_pre) {
  78. top = row_pre;
  79. height = last.top + last.height - row_pre;
  80. rowseleted = [row_index, last.row[0]];
  81. }
  82. else {
  83. top = last.top;
  84. height = row - last.top - 1;
  85. if(last.row[0] < last.row_focus){
  86. last.row[0] = last.row_focus;
  87. }
  88. rowseleted = [last.row[0], row_index];
  89. }
  90. let left = 0, width = 0, columnseleted = [];
  91. if (last.left > col_pre) {
  92. left = col_pre;
  93. width = last.left + last.width - col_pre;
  94. if(last.column[1] > last.column_focus){
  95. last.column[1] = last.column_focus;
  96. }
  97. columnseleted = [col_index, last.column[1]];
  98. }
  99. else if (last.left == col_pre) {
  100. left = col_pre;
  101. width = last.left + last.width - col_pre;
  102. columnseleted = [col_index, last.column[0]];
  103. }
  104. else {
  105. left = last.left;
  106. width = col - last.left - 1;
  107. if(last.column[0] < last.column_focus){
  108. last.column[0] = last.column_focus;
  109. }
  110. columnseleted = [last.column[0], col_index];
  111. }
  112. let changeparam = menuButton.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
  113. if(changeparam != null){
  114. columnseleted = changeparam[0];
  115. rowseleted= changeparam[1];
  116. top = changeparam[2];
  117. height = changeparam[3];
  118. left = changeparam[4];
  119. width = changeparam[5];
  120. }
  121. last["row"] = rowseleted;
  122. last["column"] = columnseleted;
  123. last["left_move"] = left;
  124. last["width_move"] = width;
  125. last["top_move"] = top;
  126. last["height_move"] = height;
  127. Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1] = last;
  128. selectHightlightShow();
  129. luckysheetFreezen.scrollFreezen();
  130. }
  131. event.stopPropagation();
  132. })
  133. $(document).on("touchend", function(event){
  134. if(luckysheet_touchmove_status){
  135. let vy_x = Math.abs(luckysheet_touchmove_startPos.vy_x), friction_x = ((vy_x >> 31) * 2 + 1) * 0.25;
  136. let vy_y = Math.abs(luckysheet_touchmove_startPos.vy_y), friction_y = ((vy_y >> 31) * 2 + 1) * 0.25;
  137. if(vy_x>0 || vy_y>0){
  138. _scrollTimer = setInterval(function () {//
  139. vy_x -= friction_x;//力度按 惯性的大小递减
  140. vy_y -= friction_y;//力度按 惯性的大小递减
  141. if(vy_x<=0){
  142. vy_x = 0;
  143. }
  144. if(vy_y<=0){
  145. vy_y = 0;
  146. }
  147. if(luckysheet_touchmove_startPos.vy_y>0){
  148. luckysheet_touchmove_startPos.scrollTop -= vy_y;
  149. }
  150. else{
  151. luckysheet_touchmove_startPos.scrollTop += vy_y;
  152. }
  153. $("#luckysheet-scrollbar-y").scrollTop(luckysheet_touchmove_startPos.scrollTop);
  154. if(luckysheet_touchmove_startPos.vy_x>0){
  155. luckysheet_touchmove_startPos.scrollLeft -= vy_x;
  156. }
  157. else{
  158. luckysheet_touchmove_startPos.scrollLeft += vy_x;
  159. }
  160. $("#luckysheet-scrollbar-x").scrollLeft(luckysheet_touchmove_startPos.scrollLeft);
  161. if(vy_x<=0 && vy_y<=0){
  162. clearInterval(_scrollTimer);
  163. }
  164. }, 20);
  165. }
  166. }
  167. luckysheet_touchmove_status = false;
  168. // luckysheet_touchmove_startPos = {};
  169. luckysheet_touchhandle_status = false;
  170. })
  171. //滑动选择选区
  172. $(document).on("touchstart", ".luckysheet-cs-touchhandle", function(event){
  173. luckysheet_touchhandle_status = true;
  174. luckysheet_touchmove_status = false;
  175. // console.log(1111111111);
  176. event.stopPropagation();
  177. })
  178. //禁止微信下拉拖出微信背景
  179. document.addEventListener("touchmove", function(event){
  180. event.preventDefault();
  181. }, {
  182. passive: false
  183. })
  184. }