react-image-gallery vs react-photo-gallery
React Image Gallery Libraries Comparison
1 Year
react-image-galleryreact-photo-gallery
What's React Image Gallery Libraries?

React image gallery libraries provide developers with ready-to-use components for displaying images in a visually appealing and interactive manner. These libraries enhance user experience by offering features such as responsive layouts, customizable styles, and various viewing options like slideshows or grid layouts. They help streamline the process of integrating image galleries into React applications, allowing developers to focus on other aspects of their projects while ensuring a polished presentation of images.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
react-image-gallery198,1523,853204 kB920 days agoMIT
react-photo-gallery14,3571,986-806 years agoMIT
Feature Comparison: react-image-gallery vs react-photo-gallery

Gallery Layout

  • react-image-gallery:

    react-image-gallery provides a slideshow format that allows users to navigate through images with controls for next, previous, and thumbnails. It supports various layouts, including fullscreen and responsive designs, making it suitable for showcasing images in a dynamic manner.

  • react-photo-gallery:

    react-photo-gallery focuses on a grid layout, allowing images to be displayed in a responsive grid format. This library automatically adjusts the layout based on the screen size and image dimensions, providing a clean and organized presentation of images.

Customization Options

  • react-image-gallery:

    react-image-gallery offers extensive customization options, including the ability to modify styles, transition effects, and control the appearance of thumbnails. Developers can easily tailor the gallery to match the design of their application, enhancing the overall user experience.

  • react-photo-gallery:

    react-photo-gallery allows for basic customization of the grid layout, including spacing and alignment. While it may not offer as many advanced options as react-image-gallery, it provides sufficient flexibility for developers to adjust the gallery's appearance to fit their needs.

Performance

  • react-image-gallery:

    react-image-gallery is optimized for performance with lazy loading capabilities, ensuring that images are only loaded when they are in view. This helps improve the loading speed and overall performance of applications that use this library, especially with large image sets.

  • react-photo-gallery:

    react-photo-gallery is lightweight and designed for fast rendering of images in a grid format. It efficiently manages image loading and layout adjustments, making it a performant choice for applications that require quick image display without heavy overhead.

User Interaction

  • react-image-gallery:

    react-image-gallery includes features for user interaction, such as swipe gestures for mobile devices, keyboard navigation, and autoplay options. These features enhance the user experience by providing intuitive ways to navigate through images.

  • react-photo-gallery:

    react-photo-gallery is more focused on displaying images rather than user interaction. While it supports basic click events for images, it does not include advanced interaction features like slideshows or autoplay, making it simpler but less dynamic.

Documentation and Community Support

  • react-image-gallery:

    react-image-gallery has comprehensive documentation and a strong community, providing developers with ample resources, examples, and support for implementation. This makes it easier to troubleshoot issues and find solutions when integrating the library into projects.

  • react-photo-gallery:

    react-photo-gallery also offers good documentation, but its community support may not be as extensive as react-image-gallery. However, it is still well-documented, making it accessible for developers looking for straightforward implementation guidance.

How to Choose: react-image-gallery vs react-photo-gallery
  • react-image-gallery:

    Choose react-image-gallery if you need a comprehensive image gallery solution that supports features like thumbnails, fullscreen mode, and autoplay. It is ideal for projects that require a slideshow or carousel format with advanced functionalities and a focus on user interaction.

  • react-photo-gallery:

    Choose react-photo-gallery if you prefer a flexible grid layout for displaying images. It is better suited for projects that require a simple, responsive grid of images without the need for complex features like slideshows or fullscreen views. This package is lightweight and easy to integrate, making it a good choice for straightforward image presentations.

README for react-image-gallery

React Image Gallery

npm version Download Count Bundle size

Live Demo (try it on mobile for swipe support)

linxtion.com/demo/react-image-gallery

demo gif

React image gallery is a React component for building image galleries and carousels

Features

  • Mobile swipe gestures
  • Thumbnail navigation
  • Fullscreen support
  • Custom rendered slides
  • RTL support
  • Responsive design
  • Tons of customization options (see props below)

Getting started

React Image Gallery requires React 16.0.0 or later.

npm install react-image-gallery

Style import options

# scss file import
@import "~react-image-gallery/styles/scss/image-gallery.scss";

# css file import
@import "~react-image-gallery/styles/css/image-gallery.css";

# js file import (using webpack)
import "react-image-gallery/styles/css/image-gallery.css";

Example

Need more example? See example/App.jsx

import ImageGallery from "react-image-gallery";
// import stylesheet if you're not already using CSS @import
import "react-image-gallery/styles/css/image-gallery.css";

const images = [
  {
    original: "https://picsum.photos/id/1018/1000/600/",
    thumbnail: "https://picsum.photos/id/1018/250/150/",
  },
  {
    original: "https://picsum.photos/id/1015/1000/600/",
    thumbnail: "https://picsum.photos/id/1015/250/150/",
  },
  {
    original: "https://picsum.photos/id/1019/1000/600/",
    thumbnail: "https://picsum.photos/id/1019/250/150/",
  },
];

class MyGallery extends React.Component {
  render() {
    return <ImageGallery items={images} />;
  }
}

Props

  • items: (required) Array of objects, see example above,

    • Available Properties
      • original - image src url
      • thumbnail - image thumbnail src url
      • fullscreen - image for fullscreen (defaults to original)
      • originalHeight - image height (html5 attribute)
      • originalWidth - image width (html5 attribute)
      • loading - image loading. Either "lazy" or "eager" (html5 attribute)
      • thumbnailHeight - image height (html5 attribute)
      • thumbnailWidth - image width (html5 attribute)
      • thumbnailLoading - image loading. Either "lazy" or "eager" (html5 attribute)
      • originalClass - custom image class
      • thumbnailClass - custom thumbnail class
      • renderItem - Function for custom rendering a specific slide (see renderItem below)
      • renderThumbInner - Function for custom thumbnail renderer (see renderThumbInner below)
      • originalAlt - image alt
      • thumbnailAlt - thumbnail image alt
      • originalTitle - image title
      • thumbnailTitle - thumbnail image title
      • thumbnailLabel - label for thumbnail
      • description - description for image
      • srcSet - image srcset (html5 attribute)
      • sizes - image sizes (html5 attribute)
      • bulletClass - extra class for the bullet of the item
  • infinite: Boolean, default true

    • infinite sliding
  • lazyLoad: Boolean, default false

  • showNav: Boolean, default true

  • showThumbnails: Boolean, default true

  • thumbnailPosition: String, default bottom

    • available positions: top, right, bottom, left
  • showFullscreenButton: Boolean, default true

  • useBrowserFullscreen: Boolean, default true

    • if false, fullscreen will be done via css within the browser
  • useTranslate3D: Boolean, default true

    • if false, will use translate instead of translate3d css property to transition slides
  • showPlayButton: Boolean, default true

  • isRTL: Boolean, default false

    • if true, gallery's direction will be from right-to-left (to support right-to-left languages)
  • showBullets: Boolean, default false

  • showIndex: Boolean, default false

  • autoPlay: Boolean, default false

  • disableThumbnailScroll: Boolean, default false

    • disables the thumbnail container from adjusting
  • disableKeyDown: Boolean, default false

    • disables keydown listener for keyboard shortcuts (left arrow, right arrow, esc key)
  • disableSwipe: Boolean, default false

  • disableThumbnailSwipe: Boolean, default false

  • onErrorImageURL: String, default undefined

    • an image src pointing to your default image if an image fails to load
    • handles both slide image, and thumbnail image
  • indexSeparator: String, default ' / ', ignored if showIndex is false

  • slideDuration: Number, default 450

    • transition duration during image slide in milliseconds
  • swipingTransitionDuration: Number, default 0

    • transition duration while swiping in milliseconds
  • slideInterval: Number, default 3000

  • slideOnThumbnailOver: Boolean, default false

  • flickThreshold: Number (float), default 0.4

    • Determines the max velocity of a swipe before it's considered a flick (lower = more sensitive)
  • swipeThreshold: Number, default 30

    • A percentage of how far the offset of the current slide is swiped to trigger a slide event. e.g. If the current slide is swiped less than 30% to the left or right, it will not trigger a slide event.
  • stopPropagation: Boolean, default false

    • Automatically calls stopPropagation on all 'swipe' events.
  • startIndex: Number, default 0

  • onImageError: Function, callback(event)

    • overrides onErrorImage
  • onThumbnailError: Function, callback(event)

    • overrides onErrorImage
  • onThumbnailClick: Function, callback(event, index)

  • onBulletClick: Function, callback(event, index)

  • onImageLoad: Function, callback(event)

  • onSlide: Function, callback(currentIndex)

  • onBeforeSlide: Function, callback(nextIndex)

  • onScreenChange: Function, callback(boolean)

    • When fullscreen is toggled a boolean is passed to the callback
  • onPause: Function, callback(currentIndex)

  • onPlay: Function, callback(currentIndex)

  • onClick: Function, callback(event)

  • onTouchMove: Function, callback(event) on gallery slide

  • onTouchEnd: Function, callback(event) on gallery slide

  • onTouchStart: Function, callback(event) on gallery slide

  • onMouseOver: Function, callback(event) on gallery slide

  • onMouseLeave: Function, callback(event) on gallery slide

  • additionalClass: String,

    • Additional class that will be added to the root node of the component.
  • renderCustomControls: Function, custom controls rendering

    • Use this to render custom controls or other elements on the currently displayed image (like the fullscreen button)
      _renderCustomControls() {
        return <a href='' className='image-gallery-custom-action' onClick={this._customAction.bind(this)}/>
      }
    
  • renderItem: Function, custom item rendering

    • NOTE: Highly suggest looking into a render cache such as React.memo if you plan to override renderItem
    • On a specific item [{thumbnail: '...', renderItem: this.myRenderItem}]
    • As a prop passed into ImageGallery to completely override renderItem, see source for renderItem implementation
  • renderThumbInner: Function, custom thumbnail rendering

    • On a specific item [{thumbnail: '...', renderThumbInner: this.myRenderThumbInner}]
    • As a prop passed into ImageGallery to completely override _renderThumbInner, see source for reference
  • renderLeftNav: Function, custom left nav component

    • See <LeftNav />
    • Use this to render a custom left nav control
    • Args:
      • onClick callback that will slide to the previous item
      • disabled boolean for when the nav is disabled
    renderLeftNav: (onClick, disabled) => (
      <LeftNav onClick={onClick} disabled={disabled} />
    );
    
  • renderRightNav: Function, custom right nav component

    • See <RightNav />
    • Use this to render a custom right nav control
    • Args:
      • onClick callback that will slide to the next item
      • disabled boolean for when the nav is disabled
    renderRightNav: (onClick, disabled) => (
      <RightNav onClick={onClick} disabled={disabled} />
    );
    
  • renderPlayPauseButton: Function, play pause button component

    • See <PlayPause />
    • Use this to render a custom play pause button
    • Args:
      • onClick callback that will toggle play/pause
      • isPlaying boolean for when gallery is playing
    renderPlayPauseButton: (onClick, isPlaying) => (
      <PlayPause onClick={onClick} isPlaying={isPlaying} />
    );
    
  • renderFullscreenButton: Function, custom fullscreen button component

    • See <Fullscreen />
    • Use this to render a custom fullscreen button
    • Args:
      • onClick callback that will toggle fullscreen
      • isFullscreen argument for when fullscreen is active
      renderFullscreenButton: (onClick, isFullscreen) => (
        <Fullscreen onClick={onClick} isFullscreen={isFullscreen} />
      ),
    
  • useWindowKeyDown: Boolean, default true

    • If true, listens to keydown events on window (window.addEventListener)
    • If false, listens to keydown events on image gallery element (imageGalleryElement.addEventListener)

Functions

The following functions can be accessed using refs

  • play(): plays the slides
  • pause(): pauses the slides
  • toggleFullScreen(): toggles full screen
  • slideToIndex(index): slides to a specific index
  • getCurrentIndex(): returns the current index

Contributing

Each pull request (PR) should be specific and isolated to the issue you're trying to fix. Please do not stack features, chores, refactors, or enhancements in one PR. Describe your feature/implementation in the PR. If you're unsure whether it's useful or if it involves a major change, please open an issue first and seek feedback.

  • Follow eslint provided
  • Comment your code
  • Write clean code

Build the example locally (requires node >= 12.13)

git clone https://github.com/xiaolin/react-image-gallery.git
cd react-image-gallery
npm install --global yarn
yarn install
yarn start

Then open localhost:8001 in a browser.

License

MIT