@@ -28,10 +28,9 @@ export default function useFrameWheel(
28
28
// Scroll status sync
29
29
const originScroll = useOriginScroll ( isScrollAtTop , isScrollAtBottom ) ;
30
30
31
- function onWheelY ( event : WheelEvent ) {
31
+ function onWheelY ( event : WheelEvent , deltaY : number ) {
32
32
raf . cancel ( nextFrameRef . current ) ;
33
33
34
- const { deltaY } = event ;
35
34
offsetRef . current += deltaY ;
36
35
wheelValueRef . current = deltaY ;
37
36
@@ -52,18 +51,16 @@ export default function useFrameWheel(
52
51
} ) ;
53
52
}
54
53
55
- function onWheelX ( event : WheelEvent ) {
56
- const { deltaX } = event ;
57
-
54
+ function onWheelX ( event : WheelEvent , deltaX : number ) {
58
55
onWheelDelta ( deltaX , true ) ;
59
56
60
57
if ( ! isFF ) {
61
58
event . preventDefault ( ) ;
62
59
}
63
60
}
64
61
65
- // Check for which direction does wheel do
66
- const wheelDirectionRef = useRef < 'x' | 'y' | null > ( null ) ;
62
+ // Check for which direction does wheel do. `sx` means `shift + wheel`
63
+ const wheelDirectionRef = useRef < 'x' | 'y' | 'sx' | null > ( null ) ;
67
64
const wheelDirectionCleanRef = useRef < number > ( null ) ;
68
65
69
66
function onWheel ( event : WheelEvent ) {
@@ -75,18 +72,32 @@ export default function useFrameWheel(
75
72
wheelDirectionRef . current = null ;
76
73
} , 2 ) ;
77
74
78
- const { deltaX, deltaY } = event ;
79
- const absX = Math . abs ( deltaX ) ;
80
- const absY = Math . abs ( deltaY ) ;
75
+ const { deltaX, deltaY, shiftKey } = event ;
76
+
77
+ let mergedDeltaX = deltaX ;
78
+ let mergedDeltaY = deltaY ;
79
+
80
+ if (
81
+ wheelDirectionRef . current === 'sx' ||
82
+ ( ! wheelDirectionRef . current && ( shiftKey || false ) && deltaY && ! deltaX )
83
+ ) {
84
+ mergedDeltaX = deltaY ;
85
+ mergedDeltaY = 0 ;
86
+
87
+ wheelDirectionRef . current = 'sx' ;
88
+ }
89
+
90
+ const absX = Math . abs ( mergedDeltaX ) ;
91
+ const absY = Math . abs ( mergedDeltaY ) ;
81
92
82
93
if ( wheelDirectionRef . current === null ) {
83
94
wheelDirectionRef . current = horizontalScroll && absX > absY ? 'x' : 'y' ;
84
95
}
85
96
86
- if ( wheelDirectionRef . current === 'x ' ) {
87
- onWheelX ( event ) ;
97
+ if ( wheelDirectionRef . current === 'y ' ) {
98
+ onWheelY ( event , mergedDeltaY ) ;
88
99
} else {
89
- onWheelY ( event ) ;
100
+ onWheelX ( event , mergedDeltaX ) ;
90
101
}
91
102
}
92
103
0 commit comments