From 68b0ec9b34b1ee7729064a45e03514e4104d85fd Mon Sep 17 00:00:00 2001 From: Vinzenz Rosenkranz Date: Thu, 12 Jul 2018 16:13:00 +0200 Subject: [PATCH] fix: wrong offset in ondrag for dropPosition calculation --- packages/core/src/index.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 54cc980..5afc00c 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -219,6 +219,16 @@ export function getNodeFromPath(rootData: TreeData[], path: number[]) { return node } +function getGlobalOffset(dropTarget: HTMLElement) { + let offset = 0 + let currentElem = dropTarget + while (currentElem) { + offset += currentElem.offsetTop + currentElem = currentElem.offsetParent + } + return offset +} + function getDropPosition(pageY: number, offsetTop: number, offsetHeight: number) { const top = pageY - offsetTop if (top < offsetHeight / 3) { @@ -252,7 +262,8 @@ export function ondrag(pageY: number, dragTarget: HTMLElement | null, dropTar const targetPath = dropTargetPathString.split(',').map(s => +s) const targetData = getNodeFromPath(data, targetPath)! const sourceData = getNodeFromPath(data, sourcePath)! - const position = getDropPosition(pageY, dropTarget.offsetTop, dropTarget.offsetHeight) + const offsetTop = getGlobalOffset(dropTarget) + const position = getDropPosition(pageY, offsetTop, dropTarget.offsetHeight) if (targetData.state.dropPosition !== position) { targetData.state.dropPosition = position const dropData: DropData = {