feat: Support pan while zooming

This commit is contained in:
Sidharth Vinod
2025-04-13 13:50:30 +05:30
parent 285baa4c83
commit 8b13bf48e7
+16 -6
View File
@@ -38,24 +38,34 @@ export class PanZoomState {
let pannedX = 0;
let pannedY = 0;
hammer = new Hammer(options.svgElement);
hammer.get('pinch').set({ enable: true });
hammer.on('panstart panmove', function (event) {
if (event.type === 'panstart') {
pannedX = 0;
pannedY = 0;
}
const resetPanned = () => {
pannedX = 0;
pannedY = 0;
};
const handlePan = (event: HammerInput) => {
instance.panBy({ x: event.deltaX - pannedX, y: event.deltaY - pannedY });
pannedX = event.deltaX;
pannedY = event.deltaY;
};
hammer.get('pinch').set({ enable: true });
hammer.on('panstart panmove', function (event) {
if (event.type === 'panstart') {
resetPanned();
}
handlePan(event);
});
hammer.on('pinchstart pinchmove', function (event) {
if (event.type === 'pinchstart') {
initialScale = instance.getZoom();
resetPanned();
}
instance.zoomAtPoint(initialScale * event.scale, {
x: event.center.x,
y: event.center.y
});
handlePan(event);
});
options.svgElement.addEventListener('touchmove', function (event) {
event.preventDefault();