@@ -144,6 +144,8 @@ class Drag implements IDisposable {
144
144
this . proposedAction = options . proposedAction || 'copy' ;
145
145
this . supportedActions = options . supportedActions || 'all' ;
146
146
this . source = options . source || null ;
147
+ this . _dragAdjustX = options . dragAdjustX || 0 ;
148
+ this . _dragAdjustY = options . dragAdjustY || 0 ;
147
149
}
148
150
149
151
/**
@@ -233,6 +235,9 @@ class Drag implements IDisposable {
233
235
return this . _promise ;
234
236
}
235
237
238
+ this . _dragOffsetX = this . _dragAdjustX - clientX ;
239
+ this . _dragOffsetY = this . _dragAdjustY - clientY ;
240
+
236
241
// Install the document listeners for the drag object.
237
242
this . _addListeners ( ) ;
238
243
@@ -291,8 +296,8 @@ class Drag implements IDisposable {
291
296
return ;
292
297
}
293
298
let style = this . dragImage . style ;
294
- style . top = `${ clientY } px` ;
295
- style . left = `${ clientX } px` ;
299
+ style . top = `${ clientY + this . dragOffsetY } px` ;
300
+ style . left = `${ clientX + this . dragOffsetX } px` ;
296
301
}
297
302
298
303
/**
@@ -311,7 +316,7 @@ class Drag implements IDisposable {
311
316
312
317
// Move the drag image to the specified client position. This is
313
318
// performed *after* dispatching to prevent unnecessary reflows.
314
- this . moveDragImage ( event . clientX , event . clientY ) ;
319
+ this . moveDragImage ( event . clientX + this . dragOffsetX , event . clientY + this . dragOffsetY ) ;
315
320
}
316
321
317
322
/**
@@ -601,6 +606,14 @@ class Drag implements IDisposable {
601
606
requestAnimationFrame ( this . _onScrollFrame ) ;
602
607
} ;
603
608
609
+ get dragOffsetX ( ) : number {
610
+ return this . _dragOffsetX ;
611
+ }
612
+
613
+ get dragOffsetY ( ) : number {
614
+ return this . _dragOffsetY ;
615
+ }
616
+
604
617
private _disposed = false ;
605
618
private _dropAction : DropAction = 'none' ;
606
619
private _override : IDisposable | null = null ;
@@ -609,6 +622,10 @@ class Drag implements IDisposable {
609
622
private _promise : Promise < DropAction > | null = null ;
610
623
private _scrollTarget : Private . IScrollTarget | null = null ;
611
624
private _resolve : ( ( value : DropAction ) => void ) | null = null ;
625
+ private _dragAdjustX : number ;
626
+ private _dragAdjustY : number ;
627
+ private _dragOffsetX : number ;
628
+ private _dragOffsetY : number ;
612
629
}
613
630
614
631
@@ -681,6 +698,20 @@ namespace Drag {
681
698
* The default value is `null`.
682
699
*/
683
700
source ?: any ;
701
+
702
+ /**
703
+ * How many pixels to offset the drag/image in the x direction.
704
+ *
705
+ * The default value is 0.
706
+ */
707
+ dragAdjustX ?: number ;
708
+
709
+ /**
710
+ * How many pixels to offset the drag/image in the y direction.
711
+ *
712
+ * The default value is 0.
713
+ */
714
+ dragAdjustY ?: number ;
684
715
}
685
716
686
717
/**
@@ -801,8 +832,8 @@ namespace Private {
801
832
export
802
833
function findScrollTarget ( event : MouseEvent ) : IScrollTarget | null {
803
834
// Look up the client mouse position.
804
- let x = event . clientX ;
805
- let y = event . clientY ;
835
+ const x = event . clientX + drag . dragOffsetX ;
836
+ const y = event . clientY + drag . dragOffsetY ;
806
837
807
838
// Get the element under the mouse.
808
839
let element : Element | null = document . elementFromPoint ( x , y ) ;
@@ -1174,8 +1205,8 @@ namespace Private {
1174
1205
// Initialize the mouse event data.
1175
1206
dragEvent . initMouseEvent (
1176
1207
type , true , true , window , 0 ,
1177
- event . screenX , event . screenY ,
1178
- event . clientX , event . clientY ,
1208
+ event . screenX + drag . dragOffsetX , event . screenY + drag . dragOffsetY ,
1209
+ event . clientX + drag . dragOffsetX , event . clientY + drag . dragOffsetY ,
1179
1210
event . ctrlKey , event . altKey ,
1180
1211
event . shiftKey , event . metaKey ,
1181
1212
event . button , related
0 commit comments