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