Skip to content

Commit c6938df

Browse files
committed
added drag image offset
1 parent e348a0d commit c6938df

File tree

1 file changed

+38
-7
lines changed

1 file changed

+38
-7
lines changed

packages/dragdrop/src/index.ts

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ class Drag implements IDisposable {
144144
this.proposedAction = options.proposedAction || 'copy';
145145
this.supportedActions = options.supportedActions || 'all';
146146
this.source = options.source || null;
147+
this._dragAdjustX = options.dragAdjustX || 0;
148+
this._dragAdjustY = options.dragAdjustY || 0;
147149
}
148150

149151
/**
@@ -233,6 +235,9 @@ class Drag implements IDisposable {
233235
return this._promise;
234236
}
235237

238+
this._dragOffsetX = this._dragAdjustX - clientX;
239+
this._dragOffsetY = this._dragAdjustY - clientY;
240+
236241
// Install the document listeners for the drag object.
237242
this._addListeners();
238243

@@ -291,8 +296,8 @@ class Drag implements IDisposable {
291296
return;
292297
}
293298
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`;
296301
}
297302

298303
/**
@@ -311,7 +316,7 @@ class Drag implements IDisposable {
311316

312317
// Move the drag image to the specified client position. This is
313318
// 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);
315320
}
316321

317322
/**
@@ -601,6 +606,14 @@ class Drag implements IDisposable {
601606
requestAnimationFrame(this._onScrollFrame);
602607
};
603608

609+
get dragOffsetX(): number {
610+
return this._dragOffsetX;
611+
}
612+
613+
get dragOffsetY(): number {
614+
return this._dragOffsetY;
615+
}
616+
604617
private _disposed = false;
605618
private _dropAction: DropAction = 'none';
606619
private _override: IDisposable | null = null;
@@ -609,6 +622,10 @@ class Drag implements IDisposable {
609622
private _promise: Promise<DropAction> | null = null;
610623
private _scrollTarget: Private.IScrollTarget | null = null;
611624
private _resolve: ((value: DropAction) => void) | null = null;
625+
private _dragAdjustX: number;
626+
private _dragAdjustY: number;
627+
private _dragOffsetX: number;
628+
private _dragOffsetY: number;
612629
}
613630

614631

@@ -681,6 +698,20 @@ namespace Drag {
681698
* The default value is `null`.
682699
*/
683700
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;
684715
}
685716

686717
/**
@@ -801,8 +832,8 @@ namespace Private {
801832
export
802833
function findScrollTarget(event: MouseEvent): IScrollTarget | null {
803834
// 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;
806837

807838
// Get the element under the mouse.
808839
let element: Element | null = document.elementFromPoint(x, y);
@@ -1174,8 +1205,8 @@ namespace Private {
11741205
// Initialize the mouse event data.
11751206
dragEvent.initMouseEvent(
11761207
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,
11791210
event.ctrlKey, event.altKey,
11801211
event.shiftKey, event.metaKey,
11811212
event.button, related

0 commit comments

Comments
 (0)