Skip to content

Commit 9ad6974

Browse files
committed
Add onPageChanged callback
1 parent 6ec5800 commit 9ad6974

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
- Customized arrow button
2626
- Customized dots
2727
- Support SSR
28+
- Add custom callback for page changement
2829

2930
## Install
3031

@@ -82,6 +83,7 @@ const Gallery = () => {
8283
| arrowRight | Element | | Customized left arrow button |
8384
| [dot](#dot) | Element | | Customized dot component with prop `isActive` |
8485
| containerStyle | Object | | Style object for carousel container |
86+
| onPageChanged | Function | | Callback triggered for page changement |
8587

8688
### responsiveLayout
8789

examples/home/App.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,21 @@ const App = () => {
6060
</Carousel.Item>
6161
))}
6262
</Carousel>
63+
<h4 className="thin">Single column with onPageChanged callback</h4>
64+
<Carousel
65+
showDots
66+
containerStyle={{ maxWidth: '500px' }}
67+
onPageChanged={currentPage => console.log(currentPage)}
68+
>
69+
{[...Array(4)].map((_, i) => (
70+
<Carousel.Item key={i}>
71+
<img
72+
width="100%"
73+
src={randomImgUrl.replace('{x}', 400).replace('{y}', 280) + i}
74+
/>
75+
</Carousel.Item>
76+
))}
77+
</Carousel>
6378
<h4 className="thin">Multiple columns</h4>
6479
<Carousel showDots cols={5}>
6580
{[...Array(15)].map((_, i) => (

src/components/Carousel.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ const Carousel = ({
106106
dot,
107107
containerClassName = '',
108108
containerStyle = {},
109-
children
109+
children,
110+
onPageChanged
110111
}) => {
111112
const [currentPage, setCurrentPage] = useState(0)
112113
const [isHover, setIsHover] = useState(false)
@@ -127,6 +128,10 @@ const Carousel = ({
127128
smoothscroll.polyfill()
128129
}, [])
129130

131+
useEffect(() => {
132+
onPageChanged && onPageChanged(currentPage)
133+
}, [currentPage])
134+
130135
useEffect(() => {
131136
const { cols, rows, gap, loop, autoplay } = breakpointSetting || {}
132137
setCols(cols || colsProp)
@@ -436,7 +441,8 @@ Carousel.propTypes = {
436441
PropTypes.elementType
437442
]),
438443
containerClassName: PropTypes.string,
439-
containerStyle: PropTypes.object
444+
containerStyle: PropTypes.object,
445+
onPageChanged: PropTypes.func
440446
}
441447

442448
Carousel.Item = ({ children }) => children

stories/Carousel.stories.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,20 @@ export const SingleColumn = () => {
2626
)
2727
}
2828

29+
export const SingleColumnWithOnPageChangedCallback = () => {
30+
const onPageChanged = currentPage => console.log(currentPage)
31+
32+
return (
33+
<Carousel cols={1} rows={1} onPageChanged={onPageChanged}>
34+
{[...Array(5)].map((_, i) => (
35+
<Carousel.Item key={i}>
36+
<Item img={randomImageUrl + i} />
37+
</Carousel.Item>
38+
))}
39+
</Carousel>
40+
)
41+
}
42+
2943
export const MultiColumns = () => {
3044
return (
3145
<Carousel cols={3} rows={1}>

0 commit comments

Comments
 (0)