@@ -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
/**
@@ -131,26 +126,20 @@ define([
131
126
$table = $ ( elem ) . parents ( 'table' ) . eq ( 0 ) ,
132
127
$tableWrapper = $table . parent ( ) ;
133
128
129
+ this . disableScroll ( ) ;
134
130
$ ( recordNode ) . addClass ( this . draggableElementClass ) ;
135
131
$ ( originRecord ) . addClass ( this . draggableElementClass ) ;
136
132
this . step = this . step === 'auto' ? originRecord . height ( ) / 2 : this . step ;
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 ;
@@ -194,9 +180,10 @@ define([
194
180
mouseupHandler : function ( event ) {
195
181
var depElementCtx ,
196
182
drEl = this . draggableElement ,
197
- pageY = isTouchDevice ? event . originalEvent . touches [ 0 ] . pageY : event . pageY ,
183
+ pageY = this . getPageY ( event ) ,
198
184
positionY = pageY - drEl . eventMousedownY ;
199
185
186
+ this . enableScroll ( ) ;
200
187
drEl . depElement = this . getDepElement ( drEl . instance , positionY , this . draggableElement . originRow ) ;
201
188
202
189
drEl . instance . remove ( ) ;
@@ -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,55 @@ define([
402
384
index = _ . isFunction ( ctx . $index ) ? ctx . $index ( ) : ctx . $index ;
403
385
404
386
return this . recordsCache ( ) [ index ] ;
387
+ } ,
388
+
389
+ /**
390
+ * Get correct page Y
391
+ *
392
+ * @param {Object } event - current event
393
+ * @returns {integer }
394
+ */
395
+ getPageY : function ( event ) {
396
+ var pageY ;
397
+
398
+ if ( event . type . indexOf ( 'touch' ) >= 0 ) {
399
+ if ( event . originalEvent . touches [ 0 ] ) {
400
+ pageY = event . originalEvent . touches [ 0 ] . pageY ;
401
+ } else {
402
+ pageY = event . originalEvent . changedTouches [ 0 ] . pageY ;
403
+ }
404
+ } else {
405
+ pageY = event . pageY ;
406
+ }
407
+
408
+ return pageY ;
409
+ } ,
410
+
411
+ /**
412
+ * Disable page scrolling
413
+ */
414
+ disableScroll : function ( ) {
415
+ document . body . addEventListener ( 'touchmove' , this . preventDefault , {
416
+ passive : false
417
+ } ) ;
418
+ } ,
419
+
420
+ /**
421
+ * Enable page scrolling
422
+ */
423
+ enableScroll : function ( ) {
424
+ document . body . removeEventListener ( 'touchmove' , this . preventDefault , {
425
+ passive : false
426
+ } ) ;
427
+ } ,
428
+
429
+ /**
430
+ * Prevent default function
431
+ *
432
+ * @param {Object } event - event object
433
+ */
434
+ preventDefault : function ( event ) {
435
+ event . preventDefault ( ) ;
405
436
}
406
437
407
438
} ) ;
0 commit comments