Skip to content

Commit efb97f8

Browse files
fix: normalize wheel deltaMode to pixels for smoother virtual scroll
1 parent a573364 commit efb97f8

1 file changed

Lines changed: 16 additions & 3 deletions

File tree

src/hooks/useFrameWheel.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,19 @@ interface FireFoxDOMMouseScrollEvent {
88
preventDefault: VoidFunction;
99
}
1010

11+
const LINE_HEIGHT = 16;
12+
const PAGE_HEIGHT = 100;
13+
14+
function normalizeWheelDelta(delta: number, deltaMode: number): number {
15+
if (deltaMode === 1) {
16+
return delta * LINE_HEIGHT;
17+
}
18+
if (deltaMode === 2) {
19+
return delta * PAGE_HEIGHT;
20+
}
21+
return delta;
22+
}
23+
1124
export default function useFrameWheel(
1225
inVirtual: boolean,
1326
isScrollAtTop: boolean,
@@ -89,10 +102,10 @@ export default function useFrameWheel(
89102
wheelDirectionRef.current = null;
90103
}, 2);
91104

92-
const { deltaX, deltaY, shiftKey } = event;
105+
const { deltaX, deltaY, deltaMode, shiftKey } = event;
93106

94-
let mergedDeltaX = deltaX;
95-
let mergedDeltaY = deltaY;
107+
let mergedDeltaX = normalizeWheelDelta(deltaX, deltaMode);
108+
let mergedDeltaY = normalizeWheelDelta(deltaY, deltaMode);
96109

97110
if (
98111
wheelDirectionRef.current === 'sx' ||

0 commit comments

Comments
 (0)