4
4
*/
5
5
6
6
import { DDManager } from './dd-manager' ;
7
- import { Utils } from './utils' ;
7
+ import { DragTransform , Utils } from './utils' ;
8
8
import { DDBaseImplement , HTMLElementExtendOpt } from './dd-base-impl' ;
9
9
import { GridItemHTMLElement , DDUIData } from './types' ;
10
10
import { DDElementHost } from './dd-element' ;
@@ -33,11 +33,6 @@ interface DragOffset {
33
33
offsetTop : number ;
34
34
}
35
35
36
- interface DragScaleReciprocal {
37
- x : number ;
38
- y : number ;
39
- }
40
-
41
36
type DDDragEvent = 'drag' | 'dragstart' | 'dragstop' ;
42
37
43
38
// make sure we are not clicking on known object that handles mouseDown
@@ -55,8 +50,6 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
55
50
/** @internal */
56
51
protected dragOffset : DragOffset ;
57
52
/** @internal */
58
- protected dragScale : DragScaleReciprocal = { x : 1 , y : 1 } ;
59
- /** @internal */
60
53
protected dragElementOriginStyle : Array < string > ;
61
54
/** @internal */
62
55
protected dragEl : HTMLElement ;
@@ -70,6 +63,13 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
70
63
protected static originStyleProp = [ 'transition' , 'pointerEvents' , 'position' , 'left' , 'top' , 'minWidth' , 'willChange' ] ;
71
64
/** @internal pause before we call the actual drag hit collision code */
72
65
protected dragTimeout : number ;
66
+ /** @internal */
67
+ protected dragTransform : DragTransform = {
68
+ xScale : 1 ,
69
+ yScale : 1 ,
70
+ xOffset : 0 ,
71
+ yOffset : 0
72
+ } ;
73
73
74
74
constructor ( el : HTMLElement , option : DDDraggableOpt = { } ) {
75
75
super ( ) ;
@@ -214,6 +214,9 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
214
214
}
215
215
this . helper = this . _createHelper ( e ) ;
216
216
this . _setupHelperContainmentStyle ( ) ;
217
+ this . dragTransform = Utils . getValuesFromTransformedElement (
218
+ this . helperContainment
219
+ ) ;
217
220
this . dragOffset = this . _getDragOffset ( e , this . el , this . helperContainment ) ;
218
221
const ev = Utils . initEvent < DragEvent > ( e , { target : this . el , type : 'dragstart' } ) ;
219
222
@@ -336,8 +339,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
336
339
// }
337
340
const style = this . helper . style ;
338
341
const offset = this . dragOffset ;
339
- style . left = ( e . clientX + offset . offsetLeft - containmentRect . left ) * this . dragScale . x + 'px' ;
340
- style . top = ( e . clientY + offset . offsetTop - containmentRect . top ) * this . dragScale . y + 'px' ;
342
+ style . left = ( e . clientX + offset . offsetLeft - containmentRect . left ) * this . dragTransform . xScale + 'px' ;
343
+ style . top = ( e . clientY + offset . offsetTop - containmentRect . top ) * this . dragTransform . yScale + 'px' ;
341
344
}
342
345
343
346
/** @internal */
@@ -359,25 +362,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
359
362
let xformOffsetX = 0 ;
360
363
let xformOffsetY = 0 ;
361
364
if ( parent ) {
362
- const testEl = document . createElement ( 'div' ) ;
363
- Utils . addElStyles ( testEl , {
364
- opacity : '0' ,
365
- position : 'fixed' ,
366
- top : 0 + 'px' ,
367
- left : 0 + 'px' ,
368
- width : '1px' ,
369
- height : '1px' ,
370
- zIndex : '-999999' ,
371
- } ) ;
372
- parent . appendChild ( testEl ) ;
373
- const testElPosition = testEl . getBoundingClientRect ( ) ;
374
- parent . removeChild ( testEl ) ;
375
- xformOffsetX = testElPosition . left ;
376
- xformOffsetY = testElPosition . top ;
377
- this . dragScale = {
378
- x : 1 / testElPosition . width ,
379
- y : 1 / testElPosition . height
380
- } ;
365
+ xformOffsetX = this . dragTransform . xOffset ;
366
+ xformOffsetY = this . dragTransform . yOffset ;
381
367
}
382
368
383
369
const targetOffset = el . getBoundingClientRect ( ) ;
@@ -386,8 +372,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
386
372
top : targetOffset . top ,
387
373
offsetLeft : - event . clientX + targetOffset . left - xformOffsetX ,
388
374
offsetTop : - event . clientY + targetOffset . top - xformOffsetY ,
389
- width : targetOffset . width * this . dragScale . x ,
390
- height : targetOffset . height * this . dragScale . y
375
+ width : targetOffset . width * this . dragTransform . xScale ,
376
+ height : targetOffset . height * this . dragTransform . yScale
391
377
} ;
392
378
}
393
379
@@ -398,8 +384,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
398
384
const offset = this . helper . getBoundingClientRect ( ) ;
399
385
return {
400
386
position : { //Current CSS position of the helper as { top, left } object
401
- top : ( offset . top - containmentRect . top ) * this . dragScale . y ,
402
- left : ( offset . left - containmentRect . left ) * this . dragScale . x
387
+ top : ( offset . top - containmentRect . top ) * this . dragTransform . yScale ,
388
+ left : ( offset . left - containmentRect . left ) * this . dragTransform . xScale
403
389
}
404
390
/* not used by GridStack for now...
405
391
helper: [this.helper], //The object arr representing the helper that's being dragged.
0 commit comments