react-image-gallery vs react-photo-gallery
React Image Gallery Libraries
react-image-galleryreact-photo-gallery

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.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
react-image-gallery354,6363,932123 kB26 days agoMIT
react-photo-gallery02,009-807 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

A responsive, customizable image gallery component for React


npm version Download Count Bundle size CI TypeScript License: MIT


ā–¶ļø VIEW LIVE DEMO


React Image Gallery Demo


✨ Features

FeatureDescription
šŸ“± Mobile SwipeNative touch gestures for smooth mobile navigation
šŸ–¼ļø ThumbnailsCustomizable thumbnail navigation with multiple positions
šŸ“ŗ FullscreenBrowser fullscreen or CSS-based fullscreen modes
šŸŽØ ThemingCSS custom properties for easy styling
āŒØļø Keyboard NavArrow keys, escape, and custom key bindings
šŸ”„ RTL SupportRight-to-left language support
ā†•ļø Vertical ModeSlide vertically instead of horizontally
šŸŽ¬ Custom SlidesRender videos, iframes, or any custom content

šŸš€ Getting Started

npm install react-image-gallery
import { useRef } from "react";
import ImageGallery from "react-image-gallery";
import "react-image-gallery/styles/image-gallery.css";
import type { GalleryItem, ImageGalleryRef } from "react-image-gallery";

const images: GalleryItem[] = [
  {
    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/",
  },
];

function MyGallery() {
  const galleryRef = useRef<ImageGalleryRef>(null);

  return (
    <ImageGallery
      ref={galleryRef}
      items={images}
      onSlide={(index) => console.log("Slid to", index)}
    />
  );
}

For more examples, see example/App.jsx


āš™ļø Props

  • items: (required) Array of objects. Available properties:
    • original - image source URL
    • thumbnail - thumbnail source URL
    • fullscreen - fullscreen image URL (defaults to original)
    • originalHeight - image height (html5 attribute)
    • originalWidth - image width (html5 attribute)
    • loading - "lazy" or "eager" (HTML5 attribute)
    • thumbnailHeight - image height (html5 attribute)
    • thumbnailWidth - image width (html5 attribute)
    • thumbnailLoading - "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 - loop infinitely
  • lazyLoad: Boolean, default false
  • showNav: Boolean, default true
  • showThumbnails: Boolean, default true
  • thumbnailPosition: String, default bottom - options: top, right, bottom, left
  • showFullscreenButton: Boolean, default true
  • useBrowserFullscreen: Boolean, default true - if false, uses CSS-based fullscreen
  • useTranslate3D: Boolean, default true - if false, uses translate instead of translate3d
  • showPlayButton: Boolean, default true
  • isRTL: Boolean, default false - right-to-left mode
  • showBullets: Boolean, default false
  • maxBullets: Number, default undefined - max bullets shown (minimum 3, active bullet stays centered)
  • showIndex: Boolean, default false
  • autoPlay: Boolean, default false
  • disableThumbnailScroll: Boolean, default false - disable thumbnail auto-scroll
  • disableKeyDown: Boolean, default false - disable keyboard navigation
  • disableSwipe: Boolean, default false
  • disableThumbnailSwipe: Boolean, default false
  • onErrorImageURL: String, default undefined - fallback image URL for failed loads
  • indexSeparator: String, default ' / ', ignored if showIndex is false
  • slideDuration: Number, default 550 - slide transition duration (ms)
  • swipingTransitionDuration: Number, default 0 - transition duration while swiping (ms)
  • slideInterval: Number, default 3000
  • slideOnThumbnailOver: Boolean, default false
  • slideVertically: Boolean, default false - slide vertically instead of horizontally
  • flickThreshold: Number, default 0.4 - swipe velocity threshold (lower = more sensitive)
  • swipeThreshold: Number, default 30 - percentage of slide width needed to trigger navigation
  • stopPropagation: Boolean, default false - call stopPropagation on swipe events
  • startIndex: Number, default 0
  • onImageError: Function, callback(event) - overrides onErrorImageURL
  • onThumbnailError: Function, callback(event) - overrides onErrorImageURL
  • 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(isFullscreen)
  • 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 for the root node
  • renderCustomControls: Function, render custom controls on the current slide
  • renderItem: Function, custom slide rendering
  • renderThumbInner: Function, custom thumbnail rendering
  • renderLeftNav: Function, custom left nav component
  • renderRightNav: Function, custom right nav component
  • renderTopNav: Function, custom top nav component (vertical mode)
  • renderBottomNav: Function, custom bottom nav component (vertical mode)
  • renderPlayPauseButton: Function, custom play/pause button
  • renderFullscreenButton: Function, custom fullscreen button
  • useWindowKeyDown: Boolean, default true - use window or element for key events

šŸ”§ Functions

The following functions can be accessed using refs

  • play(): starts the slideshow
  • pause(): pauses the slideshow
  • togglePlay(): toggles between play and pause
  • fullScreen(): enters fullscreen mode
  • exitFullScreen(): exits fullscreen mode
  • toggleFullScreen(): toggles fullscreen mode
  • slideToIndex(index): slides to a specific index
  • getCurrentIndex(): returns the current index

šŸ¤ Contributing

Pull requests should be focused on a single issue. If you're unsure whether a change is useful or involves a major modification, please open an issue first.

  • Follow the eslint config
  • Comment your code

šŸ› ļø Build the example locally

Requires Node.js >= 18.18

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

Then open localhost:8001 in a browser.


šŸ“„ License

MIT Ā© Xiao Lin