Skip to content

Commit 6be94de

Browse files
committed
Fix zoom not relative to mouse position
1 parent 183ae23 commit 6be94de

1 file changed

Lines changed: 4 additions & 6 deletions

File tree

src/components/PanAndZoom.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export type PanAndZoomProviderProps = {
4444

4545
export default React.forwardRef(function PanAndZoomProvider(
4646
{ children, settings = defaultSettings, ...rest }: PanAndZoomProviderProps,
47-
ref: React.ForwardedRef<HTMLDivElement>,
47+
forwardRef: React.ForwardedRef<HTMLDivElement>,
4848
) {
4949
const [state, setState] = useState<PanAndZoomState>(defaultState);
5050
const mousedown = useRef<boolean>(false);
@@ -147,7 +147,7 @@ export default React.forwardRef(function PanAndZoomProvider(
147147
<PanAndZoomContext.Provider value={{ state, panning }}>
148148
<div
149149
{...rest}
150-
ref={ref}
150+
ref={forwardRef}
151151
onMouseDown={e => {
152152
if (e.button === 0 || e.button === 1) {
153153
if (timeout.current) {
@@ -175,6 +175,7 @@ export default React.forwardRef(function PanAndZoomProvider(
175175
}
176176
}}
177177
onWheel={e => {
178+
const target = e.currentTarget;
178179
setState(state => {
179180
const zoomDirection = getWheelDirection(e.nativeEvent);
180181
const zoomChange = zoomDirection * settings.zoomSpeed;
@@ -183,10 +184,7 @@ export default React.forwardRef(function PanAndZoomProvider(
183184
settings.minZoom,
184185
settings.maxZoom,
185186
);
186-
const { x, y } = getRelativeMousePosition(
187-
e.nativeEvent,
188-
e.currentTarget,
189-
);
187+
const { x, y } = getRelativeMousePosition(e.nativeEvent, target);
190188
const panX = x - (x - state.panX) * (zoom / state.zoom);
191189
const panY = y - (y - state.panY) * (zoom / state.zoom);
192190
return { panX, panY, zoom };

0 commit comments

Comments
 (0)