Props
Basic
Basically, each props should have a corresponding example, which is more intuitive, but due to time constraints, it has not been done for the time being. It is expected that someone can contribute to submit PR.
data
Carousel items data set
type | default | required |
---|---|---|
T[] | - | ✅ |
renderItem
Render carousel item
type | default | required |
---|---|---|
(info: { item: T, index: number, animationValue: SharedValue<number> }) => React.ReactElement | - | ✅ |
defaultScrollOffsetValue
The default animated value of the carousel.
type | default | required |
---|---|---|
useSharedValue<number>(0) | - | ❌ |
autoFillData
Auto fill data array to allow loop playback when the loop props is true.([1] => [1, 1, 1];[1, 2] => [1, 2, 1, 2])
type | default | required |
---|---|---|
boolean | true | ❌ |
vertical
Layout items vertically instead of horizontally
type | default | required |
---|---|---|
boolean | false | ❌ |
width
Specified carousel item width
type | default | required |
---|---|---|
number | undefined | '100%' | ❌ |
height
Specified carousel item height
type | default | required |
---|---|---|
number | undefined | '100%' | ❌ |
mode
Carousel Animated transitions
type | default | required |
---|---|---|
'horizontal-stack'|'vertical-stack'|'parallax' | default | ❌ |
modeConfig
Different modes correspond to different configurations. For details, see below[modeConfig](#modeConfig
Props)
type | default | required |
---|---|---|
{moveSize?: number;stackInterval?: number;scaleInterval?: number;rotateZDeg?: number;snapDirection?: 'left' | 'right';} | - | ❌ |
style
Carousel container style
type | default | required |
---|---|---|
ViewStyle | {} | ❌ |
defaultIndex
Default index
type | default | required |
---|---|---|
number | 0 | ❌ |
autoPlay
Auto play
type | default | required |
---|---|---|
boolean | false | ❌ |
autoPlayReverse
Auto play reverse playback
type | default | required |
---|---|---|
boolean | false | ❌ |
autoPlayInterval
Auto play playback interval
type | default | required |
---|---|---|
number | 1000 | ❌ |
scrollAnimationDuration
Time a scroll animation takes to finish
type | default | required |
---|---|---|
number | 500 | ❌ |
loop
Carousel loop playback
type | default | required |
---|---|---|
boolean | true | ❌ |
testID
Used to locate this view in end-to-end tests
type | default | required |
---|---|---|
string | - | ❌ |
onSnapToItem
Callback fired when navigating to an item
type | default | required |
---|---|---|
(index: number) => void | - | ❌ |
onScrollStart
Callback fired when scroll start
type | default | required |
---|---|---|
() => void | - | ❌ |
onScrollEnd
Callback fired when scroll end
type | default | required |
---|---|---|
(index: number) => void | - | ❌ |
withAnimation
Specifies the scrolling animation effect
type | default | required |
---|---|---|
{type: 'spring';config: WithSpringConfig;} | {type: 'timing';config: WithTimingConfig;} | - | ❌ |
onConfigurePanGesture
PanGesture config
type | default | required |
---|---|---|
onConfigurePanGesture?: (panGesture: PanGesture) => void | - | ❌ |
windowSize
The maximum number of items that can respond to pan gesture events, 0
means all items will respond to pan gesture events
type | default | required |
---|---|---|
number | 0 | ❌ |
onProgressChange
This callback is called when the carousel is scrolled. If you want to update a shared value automatically, you can use the shared value as a parameter directly.
The callback provides two parameters: offsetProgress
:Total of offset distance (0 390 780 ...); absoluteProgress
:Convert to index (0 1 2 ...)
type | default | required |
---|---|---|
onProgressChange?: (offsetProgress: number,absoluteProgress: number) => void | - | ❌ |
modeConfig
Stack layout animation style
type | default | required |
---|---|---|
{moveSize?: number;stackInterval?: number;scaleInterval?: number;rotateZDeg?: number;snapDirection?: 'left' | 'right';} | { snapDirection: 'left',moveSize: window.width,stackInterval: 30,scaleInterval: 0.08,rotateZDeg: 135} | ❌ |
pagingEnabled
When true, the scroll view stops on multiples of the scroll view's size when scrolling
type | default | required |
---|---|---|
boolean | true | ❌ |
overscrollEnabled
If enabled, the item will scroll to the first placement when scrolling past the edge rather than closing to the last. (previous conditions: loop=false)
type | default | required |
---|---|---|
boolean | true | ❌ |
snapEnabled
If enabled, releasing the touch will scroll to the nearest item, valid when pagingEnabled=false
type | default | required |
---|---|---|
boolean | true | ❌ |
enabled
when false, Carousel will not respond to any gestures
type | default | required |
---|---|---|
boolean | true | ❌ |
fixedDirection
If positive, the carousel will scroll to the positive direction and vice versa.
type | default | required |
---|---|---|
'positive' | 'negative | - | ❌ |
customConfig
Custom carousel config
type | default | required |
---|---|---|
() => {type?: 'negative' | 'positive';viewCount?: number;} | - | ❌ |
customAnimation
Custom animations. For details, see below[custom animation](./custom-animation.md)
type | default | required |
---|---|---|
(value: number) => ViewStyle | - | ❌ |
maxScrollDistancePerSwipe
Maximum offset value for one scroll. Carousel cannot scroll over than this value.
type | default | required |
---|---|---|
number | - | ❌ |
minScrollDistancePerSwipe
Minimum offset value for once scroll. If the translation value is less than this value, the carousel will not scroll.
type | default | required |
---|---|---|
number | - | ❌ |
Parallax Mode
<Carousel
{...restProps}
mode="parallax"
modeConfig={{
parallaxScrollingScale: 0.9,
parallaxScrollingOffset: 50,
parallaxAdjacentItemScale: 0.8,
}}
/>
parallaxScrollingOffset
control prev/next item offset
type | default | required |
---|---|---|
number | 100 | ❌ |
parallaxScrollingScale
control prev/current/next item scale
type | default | required |
---|---|---|
number | 0.8 | ❌ |
parallaxAdjacentItemScale
control prev/next item scale
type | default | required |
---|---|---|
number | parallaxAdjacentItemScale || Math.pow(parallaxScrollingScale, 2) | ❌ |
Stack Mode
<Carousel
{...restProps}
mode="stack"
modeConfig={{
moveSize: 200,
stackInterval: 30,
scaleInterval: 0.08,
rotateZDeg: 135,
snapDirection: 'left',
}}
/>
stackInterval
The spacing of each item
type | default | required |
---|---|---|
number | 18 | ❌ |
moveSize
Item translate size
type | default | required |
---|---|---|
number | screen.width | ❌ |
scaleInterval
The scale of each item
type | default | required |
---|---|---|
number | 0.04 | ❌ |
opacityInterval
The opacity of each item
type | default | required |
---|---|---|
number | 0.1 | ❌ |
rotateZDeg
The item rotation Angle
type | default | required |
---|---|---|
number | 30 | ❌ |
snapDirection
Slide direction
type | default | required |
---|---|---|
'left'|'right' | 'left' | ❌ |
Ref
By using these methods, remember you need to reference the component using React useRef() (opens in a new tab).
JavaScript
const ref = React.useRef(null)
If you're using TypeScript:
You need to import:
import type { ICarouselInstance } from "react-native-reanimated-carousel";
and then:
const ref = React.useRef<ICarouselInstance>(null);
Now, you only need to pass the ref to the Carousel component:
<Carousel ref={ref} (...) />;
And now you can use these methods throughout your component. Here's an example of implementing a button to go to the next slide:
import React from "react";
import Carousel from "react-native-reanimated-carousel";
import type { ICarouselInstance } from "react-native-reanimated-carousel";
import { Button, Text, View } from "react-native";
// 1. Create a data array with the slides
const data = [
{
title: "Slide 1",
content: "Slide 1 Content",
},
{
title: "Slide 2",
content: "Slide 2 Content",
},
{
title: "Slide 3",
content: "Slide 3 Content",
},
];
const Example = () => {
const ref = React.useRef<ICarouselInstance>(null); // 2. Create a ref for the Carousel component
return (
<View>
{/* 3. Add the Carousel component with the ref */}
<Carousel
ref={ref}
data={data}
width={300} // 4. Add the required "width" prop
renderItem={({ item }) => (
<View>
<Text>{item.title}</Text>
<Text>{item.content}</Text>
</View>
)}
/>
{/* 5. Add a button to trigger the next slide */}
<Button
title="Next"
onPress={() => {
ref.current?.next(); // 6. Call the "next" method on the ref
}}
/>
</View>
);
};
export default Example;
prev
Scroll to previous item, it takes one optional argument (count), which allows you to specify how many items to cross
type |
---|
({ count: number, animated: boolean, onFinished?: () => void }) => void |
next
Scroll to next item, it takes one optional argument (count), which allows you to specify how many items to cross
type |
---|
({ count: number, animated: boolean, onFinished?: () => void }) => void |
scrollTo
scrollTo({ count: -2 })
Use count to scroll to a position where relative to the current position, scrollTo({count:-2}) is equivalent to prev(2), scrollTo({count:2}) is equivalent to next(2). And also can jump to specific position.
type |
---|
({ index: number, count: number, animated: boolean, onFinished?: () => void }) => void |
getCurrentIndex
Get current item index
type |
---|
()=>number |