From 8c699575cf21dde7c602d38297ef3a596c4c0a30 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Thu, 24 Sep 2026 15:57:25 +0200 Subject: [PATCH] fix pinch to zoom on touch devices --- dist/index.js | 8 +++++++- src/Model/Utility/utility.ts | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index 800c0ff5..a90c8b1e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1257,8 +1257,14 @@ if (event.touches.length < 2) return; event.preventDefault(); const currentDistance = distance(event); + const midX = midpoint(event, "x"); + const midY = midpoint(event, "y"); const ratio = currentDistance / initialDistance; - apply(initialZoom * ratio); + const difference = currentDistance - initialDistance; + apply(initialZoom * ratio, [ + initialX + (midX - difference - initialTouchX) / initialZoom / 2, + initialY + (midY - difference - initialTouchY) / initialZoom / 2 + ]); }); } function collectObjectValuesForKey(key, converter, objects) { diff --git a/src/Model/Utility/utility.ts b/src/Model/Utility/utility.ts index fdb0b8a5..4f240833 100644 --- a/src/Model/Utility/utility.ts +++ b/src/Model/Utility/utility.ts @@ -361,8 +361,14 @@ export function implementPinchZoom(canvas: HTMLElement) { if (event.touches.length < 2) return; event.preventDefault(); const currentDistance = distance(event); + const midX = midpoint(event, "x"); + const midY = midpoint(event, "y"); const ratio = currentDistance / initialDistance; - apply(initialZoom * ratio); + const difference = currentDistance - initialDistance; + apply(initialZoom * ratio, [ + initialX + (midX - difference - initialTouchX) / initialZoom / 2, + initialY + (midY - difference - initialTouchY) / initialZoom / 2, + ]); }); }