@@ -32,6 +32,8 @@ export const defaultOptions = {
32
32
yAxis : true ,
33
33
cursorOffsetX : null ,
34
34
cursorOffsetY : null ,
35
+ thresholdX : null ,
36
+ thresholdY : null ,
35
37
} ;
36
38
37
39
/**
@@ -140,6 +142,12 @@ export default class Mirror extends AbstractPlugin {
140
142
141
143
const { source, originalSource, sourceContainer, sensorEvent} = dragEvent ;
142
144
145
+ // Last sensor position of mirror move
146
+ this . lastMirrorMovedClient = {
147
+ x : sensorEvent . clientX ,
148
+ y : sensorEvent . clientY ,
149
+ } ;
150
+
143
151
const mirrorCreateEvent = new MirrorCreateEvent ( {
144
152
source,
145
153
originalSource,
@@ -187,13 +195,38 @@ export default class Mirror extends AbstractPlugin {
187
195
188
196
const { source, originalSource, sourceContainer, sensorEvent} = dragEvent ;
189
197
198
+ let passedThreshX = true ;
199
+ let passedThreshY = true ;
200
+
201
+ if ( this . options . thresholdX || this . options . thresholdY ) {
202
+ const { x : lastX , y : lastY } = this . lastMirrorMovedClient ;
203
+
204
+ if ( Math . abs ( lastX - sensorEvent . clientX ) < this . options . thresholdX ) {
205
+ passedThreshX = false ;
206
+ } else {
207
+ this . lastMirrorMovedClient . x = sensorEvent . clientX ;
208
+ }
209
+
210
+ if ( Math . abs ( lastY - sensorEvent . clientY ) < this . options . thresholdY ) {
211
+ passedThreshY = false ;
212
+ } else {
213
+ this . lastMirrorMovedClient . y = sensorEvent . clientY ;
214
+ }
215
+
216
+ if ( ! passedThreshX && ! passedThreshY ) {
217
+ return ;
218
+ }
219
+ }
220
+
190
221
const mirrorMoveEvent = new MirrorMoveEvent ( {
191
222
source,
192
223
originalSource,
193
224
sourceContainer,
194
225
sensorEvent,
195
226
dragEvent,
196
227
mirror : this . mirror ,
228
+ passedThreshX,
229
+ passedThreshY,
197
230
} ) ;
198
231
199
232
this . draggable . trigger ( mirrorMoveEvent ) ;
@@ -248,6 +281,8 @@ export default class Mirror extends AbstractPlugin {
248
281
this . mirrorOffset = mirrorOffset ;
249
282
this . initialX = initialX ;
250
283
this . initialY = initialY ;
284
+ this . lastMovedX = initialX ;
285
+ this . lastMovedY = initialY ;
251
286
return { mirrorOffset, initialX, initialY, ...args } ;
252
287
} ;
253
288
@@ -258,6 +293,8 @@ export default class Mirror extends AbstractPlugin {
258
293
mirrorClass,
259
294
scrollOffset : this . scrollOffset ,
260
295
options : this . options ,
296
+ passedThreshX : true ,
297
+ passedThreshY : true ,
261
298
} ;
262
299
263
300
return (
@@ -284,6 +321,13 @@ export default class Mirror extends AbstractPlugin {
284
321
return null ;
285
322
}
286
323
324
+ const setState = ( { lastMovedX, lastMovedY, ...args } ) => {
325
+ this . lastMovedX = lastMovedX ;
326
+ this . lastMovedY = lastMovedY ;
327
+
328
+ return { lastMovedX, lastMovedY, ...args } ;
329
+ } ;
330
+
287
331
const initialState = {
288
332
mirror : mirrorEvent . mirror ,
289
333
sensorEvent : mirrorEvent . sensorEvent ,
@@ -292,9 +336,15 @@ export default class Mirror extends AbstractPlugin {
292
336
initialX : this . initialX ,
293
337
initialY : this . initialY ,
294
338
scrollOffset : this . scrollOffset ,
339
+ passedThreshX : mirrorEvent . passedThreshX ,
340
+ passedThreshY : mirrorEvent . passedThreshY ,
341
+ lastMovedX : this . lastMovedX ,
342
+ lastMovedY : this . lastMovedY ,
295
343
} ;
296
344
297
- return Promise . resolve ( initialState ) . then ( positionMirror ( { raf : true } ) ) ;
345
+ return Promise . resolve ( initialState )
346
+ . then ( positionMirror ( { raf : true } ) )
347
+ . then ( setState ) ;
298
348
}
299
349
300
350
/**
@@ -432,7 +482,20 @@ function removeMirrorID({mirror, ...args}) {
432
482
* @private
433
483
*/
434
484
function positionMirror ( { withFrame = false , initial = false } = { } ) {
435
- return ( { mirror, sensorEvent, mirrorOffset, initialY, initialX, scrollOffset, options, ...args } ) => {
485
+ return ( {
486
+ mirror,
487
+ sensorEvent,
488
+ mirrorOffset,
489
+ initialY,
490
+ initialX,
491
+ scrollOffset,
492
+ options,
493
+ passedThreshX,
494
+ passedThreshY,
495
+ lastMovedX,
496
+ lastMovedY,
497
+ ...args
498
+ } ) => {
436
499
return withPromise (
437
500
( resolve ) => {
438
501
const result = {
@@ -444,8 +507,14 @@ function positionMirror({withFrame = false, initial = false} = {}) {
444
507
} ;
445
508
446
509
if ( mirrorOffset ) {
447
- const x = sensorEvent . clientX - mirrorOffset . left - scrollOffset . x ;
448
- const y = sensorEvent . clientY - mirrorOffset . top - scrollOffset . y ;
510
+ const x = passedThreshX
511
+ ? Math . round ( ( sensorEvent . clientX - mirrorOffset . left - scrollOffset . x ) / ( options . thresholdX || 1 ) ) *
512
+ ( options . thresholdX || 1 )
513
+ : lastMovedX ;
514
+ const y = passedThreshY
515
+ ? Math . round ( ( sensorEvent . clientY - mirrorOffset . top - scrollOffset . y ) / ( options . thresholdY || 1 ) ) *
516
+ ( options . thresholdY || 1 )
517
+ : lastMovedY ;
449
518
450
519
if ( ( options . xAxis && options . yAxis ) || initial ) {
451
520
mirror . style . transform = `translate3d(${ x } px, ${ y } px, 0)` ;
@@ -459,6 +528,9 @@ function positionMirror({withFrame = false, initial = false} = {}) {
459
528
result . initialX = x ;
460
529
result . initialY = y ;
461
530
}
531
+
532
+ result . lastMovedX = x ;
533
+ result . lastMovedY = y ;
462
534
}
463
535
464
536
resolve ( result ) ;
0 commit comments