Skip to content

Performant component for gallery previews with smooth gestures interactions and animations ๐Ÿž๏ธ

License

Notifications You must be signed in to change notification settings

chrizuuu/react-native-gallery-preview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

71 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

react-native-gallery-preview

GalleryPreview is a flexible modal component for easy gallery previews with full gesture support. Using Reanimated and React Native Gesture Handler, it gives a smooth and simple user experience for both iOS and Android.

Features

  • โšก Smooth Gesture Interactions and Animations: Experience fluid and responsive animations and gestures for a delightful user interface.
  • ๐Ÿ” Double Tap and Pinch to zoom: Users can effortlessly zoom in and out of images with simple double-tap and pinch gestures
  • ๐Ÿ‘† Pull down to close: Intuitive pull-down gesture to close the gallery preview, making navigation seamless.
  • โ†”๏ธ RTL Support
  • ๐Ÿ“ฑ Supports both iOS and Android: Fully compatible with both iOS and Android devices, ensuring a consistent experience across platforms.
  • ๐Ÿ“ฑ Compatible with Expo

Get started

Before you can use GalleryPreview, you need to set up react-native-reanimated and react-native-gesture-handler. Follow the links below for detailed installation guides:

Once the dependencies are installed, you can add react-native-gallery-preview to your project:

npm install react-native-gallery-preview
# or
yarn add react-native-gallery-preview

Example

import React, { useState } from 'react';
import { Button, View } from 'react-native';
import GalleryPreview from 'react-native-gallery-preview';

export const App = () => {
  const [isVisible, setIsVisible] = useState(false);

  const images = [
    { uri: 'https://example.com/image1.jpg' },
    { uri: 'https://example.com/image2.jpg' },
    // Add more images here
  ];

  return (
    <View>
      <Button title="Open Gallery Preview" onPress={() => setIsVisible(true)} />
      <GalleryPreview
        isVisible={isVisible}
        onRequestClose={() => setIsVisible(false)}
        images={images}
      />
    </View>
  );
};

Props

Prop Name Type Description Default
isVisible boolean Controls the visibility of the image viewer modal. -
onRequestClose () => void Function to close the image viewer modal. -
images ImageItemURI[] Array of image URIs to be displayed. -
initialIndex? number The initial index of the image to be displayed when the viewer is opened. 0
gap? number The gap between images in the viewer. 24
simultaneousRenderedImages? number The number of images rendered simultaneously for optimization. 6
OverlayComponent? (props: GalleryOverlayProps) => React.ReactNode Optional component to be rendered above the image viewer. -
ImageComponent? (props: GalleryImageComponentProps) => React.JSX.Element Optional custom component to render each image. -
springConfig? SpringConfig Spring configuration for animations. { damping: 1000, mass: 1, stiffness: 250, restDisplacementThreshold: 0.02, restSpeedThreshold: 4 }
doubleTabEnabled? boolean Enable or disable double-tap to zoom functionality. true
pinchEnabled? boolean Enable or disable pinch to zoom functionality. true
swipeToCloseEnabled? boolean Enable or disable swipe to close functionality. true
backgroundColor? string The background color of the modal, DefaultHeader, and StatusBar. #000
headerTextColor? string Color of text in the header. #fff