diff --git a/.changeset/wild-bobcats-wash.md b/.changeset/wild-bobcats-wash.md new file mode 100644 index 00000000..78e02970 --- /dev/null +++ b/.changeset/wild-bobcats-wash.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": patch +--- + +Fall back to using changedTouches when passing a touchend or touchcancel event to getEventPosition. diff --git a/packages/core/src/utils/general.ts b/packages/core/src/utils/general.ts index 5bc728af..a5b1e6a7 100644 --- a/packages/core/src/utils/general.ts +++ b/packages/core/src/utils/general.ts @@ -12,8 +12,23 @@ export function isUseDragEvent(event: any): event is UseDragEvent { export function getEventPosition(event: MouseEvent | TouchEvent, bounds?: DOMRect) { const isMouse = isMouseEvent(event) - const evtX = isMouse ? event.clientX : event.touches?.[0].clientX - const evtY = isMouse ? event.clientY : event.touches?.[0].clientY + let evtX: number + let evtY: number + + if (isMouse) { + evtX = event.clientX + evtY = event.clientY + } else if ('touches' in event && event.touches.length > 0) { + evtX = event.touches[0].clientX + evtY = event.touches[0].clientY + } else if ('changedTouches' in event && event.changedTouches.length > 0) { + evtX = event.changedTouches[0].clientX + evtY = event.changedTouches[0].clientY + } else { + // fallback for other cases + evtX = 0 + evtY = 0 + } return { x: evtX - (bounds?.left ?? 0), diff --git a/packages/core/src/utils/handle.ts b/packages/core/src/utils/handle.ts index ac179921..2fe2d065 100644 --- a/packages/core/src/utils/handle.ts +++ b/packages/core/src/utils/handle.ts @@ -122,7 +122,7 @@ export function getClosestHandle( return closestHandles[0] } -// checks if and returns connection in form of an object { source: 123, target: 312 } +// checks if and returns connection in form of an object { source: 123, target: 312 } export function isValidHandle( event: MouseEvent | TouchEvent, {