Powerful React Native Card Stack Swiper
- Install the react-native-cards-swipe package.
npm install react-native-cards-swipe
- Then you'll need to install react-native-reanimated version >= 2.1.0 to your project.
- Finally, you'll need to install react-native-gesture-handler to your project.
import React from 'react';
import { Image, StyleSheet, View } from 'react-native';
import CardsSwipe from 'react-native-cards-swipe';
const cardsData = [
{ src: require('./assets/images/1.jpg') },
{ src: require('./assets/images/2.jpg') },
{ src: require('./assets/images/3.jpg') },
{ src: require('./assets/images/4.jpg') },
];
export default function App() {
return (
<View style={styles.container}>
<CardsSwipe
cards={cardsData}
cardContainerStyle={styles.cardContainer}
renderCard={(card) => (
<View style={styles.card}>
<Image
style={styles.cardImg}
source={card.src}
/>
</View>
)}
/>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
cardContainer: {
width: '92%',
height: '70%',
},
card: {
width: '100%',
height: '100%',
shadowColor: '#000000',
shadowOffset: {
width: 0,
height: 8,
},
shadowOpacity: 0.07,
shadowRadius: 3.3,
},
cardImg: {
width: '100%',
height: '100%',
borderRadius: 13,
},
});
Props | type | description | required | default |
---|---|---|---|---|
cards | array | data for the cards | yes | |
renderCard | func | renders the card with the current data | yes | |
initialIndex | number | initial card index | 0 | |
containerStyle | object | container style | {} | |
cardContainerStyle | object | cardContainerStyle style | {} | |
lowerCardZoom | number | lower card zoom | 0.95 | |
animDuration | number | card animation duration | 150 | |
horizontalThreshold | number | horizontal swipe threshold | width * 0.65 | |
rotationAngle | number | rotation angle (deg) for the card | 10 | |
loop | bool | keep swiping indefinitely | true | |
renderNoMoreCard | func | renders what is shown after swiped last card | () => null | |
renderYep | func | renders Yep label | () => null | |
renderNope | func | renders Nope label | () => null | |
onSwipeStart | func | function to be called when a card swipe starts | () => {} | |
onSwipeChangeDirection | func | function to be called when a card is active and changes its direction (left, right). | () => {} | |
onSwipeEnd | func | function to be called when a card swipe ends (card is released) | () => {} | |
onSwiped | func | function to be called when a card is swiped. it receives the swiped card index | () => {} | |
onSwipedLeft | func | function to be called when a card is swiped left. it receives the swiped card index | () => {} | |
onSwipedRight | func | function to be called when a card is swiped right. it receives the swiped card index | () => {} | |
onNoMoreCards | func | function to be called when all elements in array are finished | () => {} |
Props | type |
---|---|
swipeLeft | func |
swipeRight | func |
<CardsSwipe ref={swiper => { this.swiper = swiper }} />
<TouchableOpacity onPress={ () => { this.swiper.swipeLeft() }}>
<Text>Left</Text>
</TouchableOpacity>
See the contributing guide to learn how to contribute to the repository and the development workflow.
MIT