@@ -15,8 +15,7 @@ define([
15
15
] , function ( ko , $ , _ , Element ) {
16
16
'use strict' ;
17
17
18
- var transformProp ,
19
- isTouchDevice = typeof document . ontouchstart !== 'undefined' ;
18
+ var transformProp ;
20
19
21
20
/**
22
21
* Get element context
@@ -110,11 +109,7 @@ define([
110
109
* @param {Object } data - element data
111
110
*/
112
111
initListeners : function ( elem , data ) {
113
- if ( isTouchDevice ) {
114
- $ ( elem ) . on ( 'touchstart' , this . mousedownHandler . bind ( this , data , elem ) ) ;
115
- } else {
116
- $ ( elem ) . on ( 'mousedown' , this . mousedownHandler . bind ( this , data , elem ) ) ;
117
- }
112
+ $ ( elem ) . on ( 'mousedown touchstart' , this . mousedownHandler . bind ( this , data , elem ) ) ;
118
113
} ,
119
114
120
115
/**
@@ -125,6 +120,7 @@ define([
125
120
* @param {Object } event - key down event
126
121
*/
127
122
mousedownHandler : function ( data , elem , event ) {
123
+ this . disableScroll ( ) ;
128
124
var recordNode = this . getRecordNode ( elem ) ,
129
125
originRecord = $ ( elem ) . parents ( 'tr' ) . eq ( 0 ) ,
130
126
drEl = this . draggableElement ,
@@ -137,20 +133,13 @@ define([
137
133
drEl . originRow = originRecord ;
138
134
drEl . instance = recordNode = this . processingStyles ( recordNode , elem ) ;
139
135
drEl . instanceCtx = this . getRecord ( originRecord [ 0 ] ) ;
140
- drEl . eventMousedownY = isTouchDevice ? event . originalEvent . touches [ 0 ] . pageY : event . pageY ;
136
+ drEl . eventMousedownY = this . getPageY ( event ) ;
141
137
drEl . minYpos =
142
138
$table . offset ( ) . top - originRecord . offset ( ) . top + $table . children ( 'thead' ) . outerHeight ( ) ;
143
139
drEl . maxYpos = drEl . minYpos + $table . children ( 'tbody' ) . outerHeight ( ) - originRecord . outerHeight ( ) ;
144
140
$tableWrapper . append ( recordNode ) ;
145
-
146
- if ( isTouchDevice ) {
147
- this . body . bind ( 'touchmove' , this . mousemoveHandler ) ;
148
- this . body . bind ( 'touchend' , this . mouseupHandler ) ;
149
- } else {
150
- this . body . bind ( 'mousemove' , this . mousemoveHandler ) ;
151
- this . body . bind ( 'mouseup' , this . mouseupHandler ) ;
152
- }
153
-
141
+ this . body . bind ( 'mousemove touchmove' , this . mousemoveHandler ) ;
142
+ this . body . bind ( 'mouseup touchend' , this . mouseupHandler ) ;
154
143
} ,
155
144
156
145
/**
@@ -160,16 +149,13 @@ define([
160
149
*/
161
150
mousemoveHandler : function ( event ) {
162
151
var depEl = this . draggableElement ,
163
- pageY = isTouchDevice ? event . originalEvent . touches [ 0 ] . pageY : event . pageY ,
152
+ pageY = this . getPageY ( event ) ,
164
153
positionY = pageY - depEl . eventMousedownY ,
165
154
processingPositionY = positionY + 'px' ,
166
155
processingMaxYpos = depEl . maxYpos + 'px' ,
167
156
processingMinYpos = depEl . minYpos + 'px' ,
168
157
depElement = this . getDepElement ( depEl . instance , positionY , depEl . originRow ) ;
169
158
170
- event . stopPropagation ( ) ;
171
- event . preventDefault ( ) ;
172
-
173
159
if ( depElement ) {
174
160
depEl . depElement ? depEl . depElement . elem . removeClass ( depEl . depElement . className ) : false ;
175
161
depEl . depElement = depElement ;
@@ -192,9 +178,10 @@ define([
192
178
* Mouse up handler
193
179
*/
194
180
mouseupHandler : function ( event ) {
181
+ this . enableScroll ( ) ;
195
182
var depElementCtx ,
196
183
drEl = this . draggableElement ,
197
- pageY = isTouchDevice ? event . originalEvent . touches [ 0 ] . pageY : event . pageY ,
184
+ pageY = this . getPageY ( event ) ,
198
185
positionY = pageY - drEl . eventMousedownY ;
199
186
200
187
drEl . depElement = this . getDepElement ( drEl . instance , positionY , this . draggableElement . originRow ) ;
@@ -212,13 +199,8 @@ define([
212
199
213
200
drEl . originRow . removeClass ( this . draggableElementClass ) ;
214
201
215
- if ( isTouchDevice ) {
216
- this . body . unbind ( 'touchmove' , this . mousemoveHandler ) ;
217
- this . body . unbind ( 'touchend' , this . mouseupHandler ) ;
218
- } else {
219
- this . body . unbind ( 'mousemove' , this . mousemoveHandler ) ;
220
- this . body . unbind ( 'mouseup' , this . mouseupHandler ) ;
221
- }
202
+ this . body . unbind ( 'mousemove touchmove' , this . mousemoveHandler ) ;
203
+ this . body . unbind ( 'mouseup touchend' , this . mouseupHandler ) ;
222
204
223
205
this . draggableElement = { } ;
224
206
} ,
@@ -402,6 +384,48 @@ define([
402
384
index = _ . isFunction ( ctx . $index ) ? ctx . $index ( ) : ctx . $index ;
403
385
404
386
return this . recordsCache ( ) [ index ] ;
387
+ } ,
388
+ /**
389
+ * Get correct page Y
390
+ *
391
+ * @param {Object } event - current event
392
+ * @returns {integer }
393
+ */
394
+ getPageY : function ( event ) {
395
+ let pageY ;
396
+ if ( event . type . indexOf ( 'touch' ) >= 0 ) {
397
+ if ( event . originalEvent . touches [ 0 ] ) {
398
+ pageY = event . originalEvent . touches [ 0 ] . pageY ;
399
+ } else {
400
+ pageY = event . originalEvent . changedTouches [ 0 ] . pageY ;
401
+ }
402
+ } else {
403
+ pageY = event . pageY ;
404
+ }
405
+ return pageY ;
406
+ } ,
407
+
408
+ /**
409
+ * Disable page scrolling
410
+ */
411
+ disableScroll : function ( ) {
412
+ document . body . addEventListener ( 'touchmove' , this . preventDefault , { passive : false } ) ;
413
+ } ,
414
+
415
+ /**
416
+ * Enable page scrolling
417
+ */
418
+ enableScroll : function ( ) {
419
+ document . body . removeEventListener ( 'touchmove' , this . preventDefault , { passive : false } ) ;
420
+ } ,
421
+
422
+ /**
423
+ * Prevent default function
424
+ *
425
+ * @param {Object } event - event object
426
+ */
427
+ preventDefault : function ( event ) {
428
+ event . preventDefault ( ) ;
405
429
}
406
430
407
431
} ) ;
0 commit comments