Skip to content

Commit 384e72e

Browse files
authored
impr(docs): Improve orbit camera to better behave on mouse scroll-wheel (#2304)
Fixes #2160 Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
1 parent 40051cf commit 384e72e

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

apps/typegpu-docs/src/examples/common/setup-orbit-camera.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,19 @@ export function setupOrbitCamera(
130130
'wheel',
131131
(event: WheelEvent) => {
132132
event.preventDefault();
133-
zoomCamera(event.deltaY);
133+
let delta = event.deltaY;
134+
// Normalize deltaY across input devices (touchpad vs mouse wheel).
135+
// Mouse wheel (deltaMode LINE) reports ~3 per notch; convert to pixels.
136+
// Touchpad (deltaMode PIXEL) reports small values directly.
137+
if (event.deltaMode === WheelEvent.DOM_DELTA_LINE) {
138+
delta *= 16;
139+
} else if (event.deltaMode === WheelEvent.DOM_DELTA_PAGE) {
140+
delta *= canvas.clientHeight;
141+
}
142+
// Clamp to prevent large jumps from discrete mouse wheel notches
143+
// (Chrome reports deltaMode PIXEL with ~100 per mouse wheel notch).
144+
delta = Math.sign(delta) * Math.min(Math.abs(delta), 60);
145+
zoomCamera(delta);
134146
},
135147
{ passive: false },
136148
);

0 commit comments

Comments
 (0)