-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcarousel.js
80 lines (67 loc) · 1.47 KB
/
carousel.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
import React, { PureComponent } from 'react';
import { ViewPager, Frame, Track, View } from '../../src/index';
class Carousel extends PureComponent {
static defaultProps = {
viewsToShow: 1,
infinite: true,
contain: false
}
showPrev = () => {
this.track && this.track.prev();
};
showNext = () => {
this.track && this.track.next();
};
render() {
const {
viewsToShow,
infinite,
} = this.props;
return (
<>
<ViewPager>
<Frame className="frame">
<Track
className="track"
ref={ element => this.track = element }
infinite={infinite}
viewsToShow={viewsToShow}
>
{
React.Children.map(this.props.children, (child, index) => (
<View className="view" key={index}>
{ child }
</View>
))
}
</Track>
</Frame>
</ViewPager>
{ this.renderControls() }
</>
);
}
renderControls() {
return (
<div>
{ this.renderPrevButton() }
{ this.renderNextButton() }
</div>
);
}
renderPrevButton() {
return (
<button onClick={() => this.track.prev()}>
Previous
</button>
);
}
renderNextButton() {
return (
<button onClick={() => this.track.next()}>
Next
</button>
);
}
}
export default Carousel;