auto: 2026-07-28 18:28 (EOMSANGDON-HOME)
This commit is contained in:
@@ -381,7 +381,17 @@ export function createSurfaceMapViewer(): SurfaceMapViewer {
|
||||
"wheel",
|
||||
(event) => {
|
||||
event.preventDefault();
|
||||
const prevScale = scale;
|
||||
scale = Math.min(8, Math.max(0.5, scale * (event.deltaY < 0 ? 1.15 : 0.87)));
|
||||
// 마우스 커서 아래 지점이 줌 전후로 같은 화면 위치에 머물도록 offset 보정.
|
||||
// screen = center + (base - center)·scale + offset 이므로,
|
||||
// 커서 고정 조건을 풀면 offset' = (cursor - center)·(1 - r) + offset·r (r = scale'/scale).
|
||||
const ratio = scale / prevScale;
|
||||
const rect = viewport.getBoundingClientRect();
|
||||
const cursorX = event.clientX - rect.left - rect.width / 2;
|
||||
const cursorY = event.clientY - rect.top - rect.height / 2;
|
||||
offsetX = cursorX * (1 - ratio) + offsetX * ratio;
|
||||
offsetY = cursorY * (1 - ratio) + offsetY * ratio;
|
||||
scheduleDraw();
|
||||
},
|
||||
{ passive: false },
|
||||
|
||||
Reference in New Issue
Block a user