diff --git a/B07_DesignDetail/openwebcad/src/inputController/input-controller.ts b/B07_DesignDetail/openwebcad/src/inputController/input-controller.ts index 55c0592a..4dad90a8 100644 --- a/B07_DesignDetail/openwebcad/src/inputController/input-controller.ts +++ b/B07_DesignDetail/openwebcad/src/inputController/input-controller.ts @@ -67,13 +67,25 @@ export class InputController { canvas?.addEventListener('mousedown', (evt: MouseEvent) => this.handleMouseDown(evt)); canvas?.addEventListener('mousemove', (evt: MouseEvent) => this.handleMouseMove(evt)); canvas?.addEventListener('mouseup', (evt: MouseEvent) => this.handleMouseUp(evt)); - canvas?.addEventListener('wheel', (evt: WheelEvent) => this.handleMouseWheel(evt)); + // passive:false — 핀치·휠의 브라우저 기본 확대/스크롤을 막아야 한다. + canvas?.addEventListener('wheel', (evt: WheelEvent) => this.handleMouseWheel(evt), { + passive: false, + }); canvas?.addEventListener('mouseout', () => this.handleMouseOut()); canvas?.addEventListener('mouseenter', () => this.handleMouseEnter()); // Stop the context menu from appearing when right-clicking canvas?.addEventListener('contextmenu', (evt) => { evt.preventDefault(); }); + // 캔버스 밖(리본·패널) 위에서의 트랙패드 핀치도 브라우저를 확대시키지 않는다. + // ctrl이 없는 휠은 그대로 둬서 패널 스크롤은 살린다. + document.addEventListener( + 'wheel', + (evt: WheelEvent) => { + if (evt.ctrlKey) evt.preventDefault(); + }, + { passive: false } + ); } public draw(drawController: ScreenCanvasDrawController) { @@ -214,6 +226,8 @@ export class InputController { * @param evt */ public handleMouseWheel(evt: WheelEvent) { + // 확대는 도면만 — 트랙패드 핀치(ctrl+휠)가 브라우저 전체를 키우던 것을 막는다. + evt.preventDefault(); if (Math.abs(evt.deltaY) === 0) { return; // We can't zoom by zero delta }