From cc65f12af9e2fe550270acde75a759be6cc37550 Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Wed, 23 Apr 2025 20:25:19 +0200 Subject: [PATCH] fix(core): fall back to changedTouches for touchend events (#1830) * fix(core): fall back to changedTouches for touchend events Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> * chore(changeset): add Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --------- Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --- .changeset/wild-bobcats-wash.md | 5 +++++ packages/core/src/utils/general.ts | 19 +++++++++++++++++-- packages/core/src/utils/handle.ts | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 .changeset/wild-bobcats-wash.md 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, {