@@ -13,22 +13,7 @@ import {
13
13
14
14
import { IDimensions , IScroll , IViewport , OnUpdateType } from './types' ;
15
15
16
- const getNodeScroll = ( elem = window ) => {
17
- let { scrollX, scrollY } = elem ;
18
- if ( scrollX === undefined ) {
19
- scrollX = elem . pageXOffset ;
20
- }
21
- if ( scrollY === undefined ) {
22
- scrollY = elem . pageYOffset ;
23
- }
24
-
25
- return {
26
- x : scrollX ,
27
- y : scrollY ,
28
- } ;
29
- } ;
30
-
31
- const getClientDimensions = ( ) : IDimensions => {
16
+ export const getClientDimensions = ( ) : IDimensions => {
32
17
if ( ! document || ! document . documentElement ) {
33
18
return createEmptyDimensionState ( ) ;
34
19
}
@@ -53,6 +38,56 @@ const getClientDimensions = (): IDimensions => {
53
38
} ;
54
39
} ;
55
40
41
+ const getNodeScroll = ( elem = window ) => {
42
+ let { scrollX, scrollY } = elem ;
43
+ if ( scrollX === undefined ) {
44
+ scrollX = elem . pageXOffset ;
45
+ }
46
+ if ( scrollY === undefined ) {
47
+ scrollY = elem . pageYOffset ;
48
+ }
49
+
50
+ return {
51
+ x : scrollX ,
52
+ y : scrollY ,
53
+ } ;
54
+ } ;
55
+
56
+ export const getClientScroll = (
57
+ prevScrollState : IScroll = createEmptyScrollState ( ) ,
58
+ ) => {
59
+ if ( typeof window === 'undefined' ) {
60
+ return createEmptyScrollState ( ) ;
61
+ }
62
+ const { x, y } = getNodeScroll ( ) ;
63
+ const nextScrollState = { ...prevScrollState } ;
64
+ const {
65
+ isScrollingLeft : prevIsScrollingLeft ,
66
+ isScrollingUp : prevIsScrollingUp ,
67
+ xTurn : prevXTurn ,
68
+ yTurn : prevYTurn ,
69
+ } = prevScrollState ;
70
+
71
+ nextScrollState . isScrollingLeft = isScrollingLeft ( x , nextScrollState ) ;
72
+ nextScrollState . isScrollingRight = ! nextScrollState . isScrollingLeft ;
73
+
74
+ nextScrollState . isScrollingUp = isScrollingUp ( y , nextScrollState ) ;
75
+ nextScrollState . isScrollingDown = ! nextScrollState . isScrollingUp ;
76
+
77
+ nextScrollState . xTurn =
78
+ nextScrollState . isScrollingLeft === prevIsScrollingLeft ? prevXTurn : x ;
79
+ nextScrollState . yTurn =
80
+ nextScrollState . isScrollingUp === prevIsScrollingUp ? prevYTurn : y ;
81
+
82
+ nextScrollState . xDTurn = x - nextScrollState . xTurn ;
83
+ nextScrollState . yDTurn = y - nextScrollState . yTurn ;
84
+
85
+ nextScrollState . x = x ;
86
+ nextScrollState . y = y ;
87
+
88
+ return nextScrollState ;
89
+ } ;
90
+
56
91
const isScrollingLeft = ( x : number , prev : IScroll ) => {
57
92
switch ( true ) {
58
93
case x < prev . x :
@@ -178,37 +213,12 @@ export default class ViewportCollector extends React.PureComponent<IProps> {
178
213
} ;
179
214
180
215
handleScroll = ( ) => {
181
- const { x, y } = getNodeScroll ( ) ;
182
- const {
183
- isScrollingLeft : prevIsScrollingLeft ,
184
- isScrollingUp : prevIsScrollingUp ,
185
- xTurn : prevXTurn ,
186
- yTurn : prevYTurn ,
187
- } = this . scrollState ;
188
-
189
- this . scrollState . isScrollingLeft = isScrollingLeft ( x , this . scrollState ) ;
190
- this . scrollState . isScrollingRight = ! this . scrollState . isScrollingLeft ;
191
-
192
- this . scrollState . isScrollingUp = isScrollingUp ( y , this . scrollState ) ;
193
- this . scrollState . isScrollingDown = ! this . scrollState . isScrollingUp ;
194
-
195
- this . scrollState . xTurn =
196
- this . scrollState . isScrollingLeft === prevIsScrollingLeft ? prevXTurn : x ;
197
- this . scrollState . yTurn =
198
- this . scrollState . isScrollingUp === prevIsScrollingUp ? prevYTurn : y ;
199
-
200
- this . scrollState . xDTurn = x - this . scrollState . xTurn ;
201
- this . scrollState . yDTurn = y - this . scrollState . yTurn ;
202
-
203
- this . scrollState . x = x ;
204
- this . scrollState . y = y ;
205
-
216
+ Object . assign ( this . scrollState , getClientScroll ( this . scrollState ) ) ;
206
217
this . componentMightHaveUpdated = true ;
207
218
} ;
208
219
209
220
handleResize = ( ) => {
210
221
Object . assign ( this . dimensionsState , getClientDimensions ( ) ) ;
211
-
212
222
this . componentMightHaveUpdated = true ;
213
223
} ;
214
224
0 commit comments