| Prop | Type | Description |
|---|---|---|
| ref | ReactSlipAndSlideRef |
Instance reference that allow some external controls |
| data | T[] |
The shape data will be inferred from usage |
| snap | boolean? |
Turns on offset snapping |
| centered | boolean? |
Centers the items on the container |
| infinite | boolean? |
Turns on infinite looping |
| pressToSlide | boolean? |
Allows navigation when the next/prev item is pressed |
| animateStartup | boolean? |
If true the slider will have an opacity transition when mounted. (can be useful to hide initial setup when itemWidth and/or itemHeight are not provided) |
| containerWidth | number? |
The width of the items parent node (defaults to the width of the grand parent if undefined node) |
| overflowHidden | boolean? |
Allows the items to be visible when overflowing the parent container |
| fullWidthItem | boolean? |
If true the items will assume the width of it's container. Useful if you leave containerWidth undefined to force it to fallback to 100%. The containerWidth will be measured for you and them containerWidth and itemWidth will be the same |
| animateStartup | boolean? |
Animates opacity on start up |
| itemWidth | number? |
The width of the items |
| itemHeight | number? |
The height of the items |
| interpolators | [key in keyof CSSProperties]: number / undefined |
Allows you to define custom interpolation effects. For example, if opacity: 0.3, all items but the current will have opacity of 0.3, while the current will have 1. Be reasonable with this one as i'm not validating the properties |
| rubberbandElasticity | number? |
The amount of elasticity when dragging beyond the container edges |
| visibleItems | number? |
The amount of rendered items at the same time |
| useWheel | boolean? |
Allows you to control the slide gesture with the trackpad or mouse wheel |
| momentumMultiplier | number? |
Controls how much momentum the release will have when snap if false. To prevent bad UX the expected range is between 0 and 1 |
| renderItem | (props: RenderItemProps<T>) => JSX.Element |
A function that have access to index and item props and returns a JSX.Element |
| onChange | onChange?: (index: number) => void |
A callback that's fired when the index changes |
| onEdges | onEdges?: (props: {start: boolean; end: boolean;}) => void |
A callback that's fired when the offset reaches both the start or end edges |
| onReady | onReady?: (ready: boolean) => void |
onReady fires immediately if animateStartup is set to true otherwise it fires after the setup phase |
| Handler | Description |
|---|---|
| next | Go to next slide |
| next | Go to previous slide |
| goTo | Go to some index with an animation or not |
| move | Move the offset by the pixels provided (-x goes forward, x goes backwards) |
const data = [
{
label: "Lorem",
},
{
label: "Ipsum",
},
...
];
function App() {
const ref = React.useRef<ReactSlipAndSlideRef>(null);
const prev = () => ref.current?.previous();
const next = () => ref.current?.next();
return (
<div className="App">
<ReactSlipAndSlide
ref={ref}
data={data}
snap
centered
infinite
pressToSlide
itemWidth={420}
itemHeight={400}
interpolators={{
opacity: 0.3,
scale: 0.9,
}}
renderItem={({ index, item }) => {
return (
<img
style={{ borderRadius: 80 }}
src={`https://picsum.photos/seed/${index * 2}/400`}
alt={item.label}
/>
);
}}
/>
</div>
);
}Important! In order to get Android to work properly, you need to wrap your app with GestureHandlerRootView.
function App() {
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<ReactSlipAndSlide />
</GestureHandlerRootView>
);
}Licensed under the terms of the MIT License.
