react-native-anchor-carousel

a simple swipeable carousel which anchor two sides

Usage no npm install needed!

<script type="module">
  import reactNativeAnchorCarousel from 'https://cdn.skypack.dev/react-native-anchor-carousel';
</script>

README

react-native-anchor-carousel


Build Status

A simple swipeable carousel for React Native which anchor two side of list.

Installation

Install the dependency.

$ npm install react-native-anchor-carousel 
$ yarn add react-native-anchor-carousel 


For older version, install 3.1.2

$ npm install react-native-anchor-carousel@3.1.2
$ yarn add react-native-anchor-carousel@3.1.2 

Example

Expo snack demo here


full example here

import Carousel from 'react-native-anchor-carousel';
const {width: windowWidth} = Dimensions.get('window');
const styles = StyleSheet.create({
 carousel: {
  flexGrow: 0,
  height: 150,
 }
});


Hook Component version:

const carouselRef = React.useRef(null);
renderItem = ({item, index}) => {
 return (
         <TouchableOpacity
                 style={styles.item}
                 onPress={() => {
                  carouselRef.current.scrollToIndex(index);
                 }}>
          ...
         </TouchableOpacity>
 );
}
return (<Carousel
        ref={carouselRef}
        data={Array(3).fill(0)}
        renderItem={renderItem}
        style={styles.carousel}
        itemWidth={windowWidth * 0.8}
        containerWidth={windowWidth}
        separatorWidth={0}
/>)


Traditional Class Component version:

renderItem = ({item, index}) => {
 return (
         <TouchableOpacity
                 style={styles.item}
                 onPress={() => {
                  this.numberCarousel.scrollToIndex(index);
                 }}>
          ...
         </TouchableOpacity>
 );
};

render() {
 return (
         <Carousel
                 style={styles.carousel}
                 ref={c => {
                  this.numberCarousel = c;
                 }}
                 data={Array(3).fill(0)}
                 renderItem={this.renderItem}
                 itemWidth={windowWidth * 0.8}
                 separatorWidth={0}
                 containerWidth={windowWidth}
         />
 );
}

Usages

This component currently just support only carousel for horizontal side carousel From version 2.2.0.
It is now supported Flatlist props from version 3.0.0 Change scroll behavior of previous versions
From version 4.0.0 it has been moved to Functional component and fix separator bug

Props Description Type Default Required
data Array of data for rendering Array [] Yes
renderItems take each item from data and renders it. Function receives one agrument {item,index} and must return as React.Element Function () => {} Yes
keyExtractor Key extractor for each item of list Function (item, index) => index.toString() Should
Other Flatlist Props Other Flatlist Props
minScrollDistance Minimum distance when scrolling to move to the next item. Notice this property when you need to improve smoothness Number 5 No
containerWidth Width of the carousel container box Number Screen width Yes
itemWidth Width of each item in carousel Number 90% of screen width Yes
separatorWidth Width of separator in carousel (cause it only support horizontal side at the present time) Number 10 No
inActiveScale Value of the scale effect applied to inactive item Number 0.8 No
inActiveOpacity Value of the opacity effect applied to inactive item Number 0.8 No
style Style of the carousel container box View style {} No
itemContainerStyle Style for each carousel container item View style {} No
onScrollEnd Fired while scrollview end of scrolling Function ()=> {} No
initialIndex Initial starting focused item of list Number 0 No

References from

This library is written after taking reference from react-native-snap-carousel

Development

Welcome everybody to contribute ! Hope this simple carousel can help somebody for fast develope react-native app!

Todos

  • Cover vertical side carousel

License

MIT

Free Software, Hell Yeah!