@@ -10,13 +10,22 @@ function logEvent(type) {
10
10
console . log ( `event '${ type } ' triggered!` ) ;
11
11
}
12
12
13
+ const debounce = ( fn , ms = 0 ) => {
14
+ let timeoutId ;
15
+ return function wrapper ( ...args ) {
16
+ clearTimeout ( timeoutId ) ;
17
+ timeoutId = setTimeout ( ( ) => fn . apply ( this , args ) , ms ) ;
18
+ } ;
19
+ } ;
20
+
13
21
class Example extends Component {
14
22
constructor ( props ) {
15
23
super ( props ) ;
16
24
17
25
this . state = {
18
26
className : undefined ,
19
27
onXReachEnd : null ,
28
+ items : Array . from ( new Array ( 100 ) . keys ( ) ) ,
20
29
} ;
21
30
}
22
31
@@ -33,28 +42,48 @@ class Example extends Component {
33
42
logEvent ( 'onYReachEnd' ) ;
34
43
}
35
44
45
+ handleTrigger = ( ) => {
46
+ this . setState ( {
47
+ items : Array . from ( new Array ( 100 ) . keys ( ) ) ,
48
+ } ) ;
49
+ }
50
+
51
+ handleSync = debounce ( ( ps ) => {
52
+ ps . update ( ) ;
53
+ console . log ( 'debounce sync ps container in 1000ms' ) ;
54
+ } , 1000 )
55
+
36
56
render ( ) {
37
57
const { className, onXReachEnd } = this . state ;
38
58
39
59
return (
40
- < div className = "example" >
41
- < ScrollBar
42
- className = { className }
43
- onScrollY = { ( ) => logEvent ( 'onScrollY' ) }
44
- onScrollX = { ( ) => logEvent ( 'onScrollX' ) }
45
- onScrollUp = { ( ) => logEvent ( 'onScrollUp' ) }
46
- onScrollDown = { ( ) => logEvent ( 'onScrollDown' ) }
47
- onScrollLeft = { ( ) => logEvent ( 'onScrollLeft' ) }
48
- onScrollRight = { ( ) => logEvent ( 'onScrollRight' ) }
49
- onYReachStart = { ( ) => logEvent ( 'onYReachStart' ) }
50
- onYReachEnd = { this . handleYReachEnd }
51
- onXReachStart = { ( ) => logEvent ( 'onXReachStart' ) }
52
- onXReachEnd = { onXReachEnd }
53
- component = "div"
54
- >
55
- < div className = "content" />
56
- </ ScrollBar >
57
- </ div >
60
+ < React . Fragment >
61
+
62
+ < div className = "example" >
63
+ < ScrollBar
64
+ className = { className }
65
+ onScrollY = { ( ) => logEvent ( 'onScrollY' ) }
66
+ onScrollX = { ( ) => logEvent ( 'onScrollX' ) }
67
+ onScrollUp = { ( ) => logEvent ( 'onScrollUp' ) }
68
+ onScrollDown = { ( ) => logEvent ( 'onScrollDown' ) }
69
+ onScrollLeft = { ( ) => logEvent ( 'onScrollLeft' ) }
70
+ onScrollRight = { ( ) => logEvent ( 'onScrollRight' ) }
71
+ onYReachStart = { ( ) => logEvent ( 'onYReachStart' ) }
72
+ onYReachEnd = { this . handleYReachEnd }
73
+ onXReachStart = { ( ) => logEvent ( 'onXReachStart' ) }
74
+ onXReachEnd = { onXReachEnd }
75
+ component = "div"
76
+ >
77
+ < div className = "content" />
78
+ </ ScrollBar >
79
+ </ div >
80
+ < div className = "example" >
81
+ < button onClick = { this . handleTrigger } > Trigger</ button >
82
+ < ScrollBar onSync = { this . handleSync } >
83
+ { this . state . items . map ( e => ( < div key = { e } > { e } </ div > ) ) }
84
+ </ ScrollBar >
85
+ </ div >
86
+ </ React . Fragment >
58
87
) ;
59
88
}
60
89
}
0 commit comments