44 */
55
66import { DDManager } from './dd-manager' ;
7- import { Utils } from './utils' ;
7+ import { DragTransform , Utils } from './utils' ;
88import { DDBaseImplement , HTMLElementExtendOpt } from './dd-base-impl' ;
99import { GridItemHTMLElement , DDUIData } from './types' ;
1010import { DDElementHost } from './dd-element' ;
@@ -33,11 +33,6 @@ interface DragOffset {
3333 offsetTop : number ;
3434}
3535
36- interface DragScaleReciprocal {
37- x : number ;
38- y : number ;
39- }
40-
4136type DDDragEvent = 'drag' | 'dragstart' | 'dragstop' ;
4237
4338// make sure we are not clicking on known object that handles mouseDown
@@ -55,8 +50,6 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
5550 /** @internal */
5651 protected dragOffset : DragOffset ;
5752 /** @internal */
58- protected dragScale : DragScaleReciprocal = { x : 1 , y : 1 } ;
59- /** @internal */
6053 protected dragElementOriginStyle : Array < string > ;
6154 /** @internal */
6255 protected dragEl : HTMLElement ;
@@ -70,6 +63,13 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
7063 protected static originStyleProp = [ 'transition' , 'pointerEvents' , 'position' , 'left' , 'top' , 'minWidth' , 'willChange' ] ;
7164 /** @internal pause before we call the actual drag hit collision code */
7265 protected dragTimeout : number ;
66+ /** @internal */
67+ protected dragTransform : DragTransform = {
68+ xScale : 1 ,
69+ yScale : 1 ,
70+ xOffset : 0 ,
71+ yOffset : 0
72+ } ;
7373
7474 constructor ( el : HTMLElement , option : DDDraggableOpt = { } ) {
7575 super ( ) ;
@@ -214,6 +214,9 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
214214 }
215215 this . helper = this . _createHelper ( e ) ;
216216 this . _setupHelperContainmentStyle ( ) ;
217+ this . dragTransform = Utils . getValuesFromTransformedElement (
218+ this . helperContainment
219+ ) ;
217220 this . dragOffset = this . _getDragOffset ( e , this . el , this . helperContainment ) ;
218221 const ev = Utils . initEvent < DragEvent > ( e , { target : this . el , type : 'dragstart' } ) ;
219222
@@ -336,8 +339,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
336339 // }
337340 const style = this . helper . style ;
338341 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' ;
341344 }
342345
343346 /** @internal */
@@ -359,25 +362,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
359362 let xformOffsetX = 0 ;
360363 let xformOffsetY = 0 ;
361364 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 ;
381367 }
382368
383369 const targetOffset = el . getBoundingClientRect ( ) ;
@@ -386,8 +372,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
386372 top : targetOffset . top ,
387373 offsetLeft : - event . clientX + targetOffset . left - xformOffsetX ,
388374 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
391377 } ;
392378 }
393379
@@ -398,8 +384,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
398384 const offset = this . helper . getBoundingClientRect ( ) ;
399385 return {
400386 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
403389 }
404390 /* not used by GridStack for now...
405391 helper: [this.helper], //The object arr representing the helper that's being dragged.
0 commit comments