react-image-gallery vs react-image-lightbox vs react-images vs react-photo-gallery
画像ギャラリーライブラリ
react-image-galleryreact-image-lightboxreact-imagesreact-photo-gallery

画像ギャラリーライブラリ

これらのライブラリは、Reactアプリケーションでの画像の表示と管理を簡素化するために設計されています。各ライブラリは、異なる機能やデザインのアプローチを提供し、ユーザーが画像を効果的に表示するための多様なオプションを提供します。これにより、開発者はプロジェクトのニーズに最適なソリューションを選択できます。

npmのダウンロードトレンド

3 年

GitHub Starsランキング

統計詳細

パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
react-image-gallery03,932123 kB220日前MIT
react-image-lightbox01,280-05年前MIT
react-images02,346-505年前MIT
react-photo-gallery02,010-807年前MIT

機能比較: react-image-gallery vs react-image-lightbox vs react-images vs react-photo-gallery

カスタマイズ性

  • react-image-gallery:

    react-image-galleryは、豊富なカスタマイズオプションを提供します。スライドショーの速度、遷移効果、サムネイルの表示方法などを簡単に設定でき、独自のスタイルに合わせて調整可能です。

  • react-image-lightbox:

    react-image-lightboxは、シンプルなデザインとカスタマイズ性を兼ね備えています。画像の表示方法やモーダルのスタイルを変更するためのプロパティが豊富に用意されています。

  • react-images:

    react-imagesは、基本的なカスタマイズ機能を提供しますが、他のライブラリに比べると柔軟性はやや劣ります。シンプルなAPIで、必要最低限のカスタマイズが可能です。

  • react-photo-gallery:

    react-photo-galleryは、グリッドレイアウトのカスタマイズに特化しています。画像のサイズや配置を柔軟に設定でき、レスポンシブデザインに最適です。

ユーザー体験

  • react-image-gallery:

    ユーザーが画像を簡単にナビゲートできるように設計されており、スワイプやクリックでの操作がスムーズです。サムネイル表示もあり、視覚的に魅力的な体験を提供します。

  • react-image-lightbox:

    フルスクリーン表示に特化しており、ユーザーが画像を集中して楽しむことができます。直感的なナビゲーションが可能で、ズーム機能も備えています。

  • react-images:

    シンプルなインターフェースを提供し、ユーザーが画像を簡単に閲覧できるように設計されています。基本的な機能に焦点を当てており、使いやすさを重視しています。

  • react-photo-gallery:

    グリッドレイアウトを使用して、視覚的に整理された画像の表示を実現します。ユーザーは画像を簡単に見つけることができ、快適な閲覧体験を提供します。

パフォーマンス

  • react-image-gallery:

    多くの画像を扱う場合でも、パフォーマンスが高く保たれるように最適化されています。遅延読み込み機能を使用することで、初期読み込み時間を短縮できます。

  • react-image-lightbox:

    軽量で高速なパフォーマンスを提供し、画像の表示がスムーズです。モーダルウィンドウの表示も迅速で、ユーザーの待機時間を最小限に抑えます。

  • react-images:

    シンプルな構造のため、パフォーマンスは良好ですが、大規模な画像セットには注意が必要です。適切な画像サイズを使用することが推奨されます。

  • react-photo-gallery:

    レスポンシブデザインに最適化されており、異なるデバイスでのパフォーマンスが向上しています。画像の読み込みを効率的に行い、スムーズな体験を提供します。

レスポンシブデザイン

  • react-image-gallery:

    レスポンシブデザインに対応しており、異なる画面サイズでの表示が最適化されています。モバイルデバイスでも快適に使用できます。

  • react-image-lightbox:

    モーダル表示がレスポンシブで、画面サイズに応じて自動的に調整されます。ユーザーはどのデバイスでも快適に画像を閲覧できます。

  • react-images:

    基本的なレスポンシブ機能を提供しますが、他のライブラリに比べると柔軟性はやや劣ります。

  • react-photo-gallery:

    グリッドレイアウトがレスポンシブに対応しており、画面サイズに応じて画像の配置が自動的に調整されます。

学習曲線

  • react-image-gallery:

    比較的簡単に学べるライブラリで、ドキュメントも充実しています。初めてのユーザーでもスムーズに導入できます。

  • react-image-lightbox:

    シンプルなAPIにより、学習曲線は緩やかです。基本的な使い方を理解するのが容易で、すぐに実装できます。

  • react-images:

    非常にシンプルな設計のため、学習曲線はほぼありません。すぐに使い始めることができます。

  • react-photo-gallery:

    グリッドレイアウトの概念を理解する必要がありますが、全体的に学習は容易です。ドキュメントが充実しており、サポートも受けやすいです。

選び方: react-image-gallery vs react-image-lightbox vs react-images vs react-photo-gallery

  • react-image-gallery:

    多機能でカスタマイズ可能なギャラリーが必要な場合は、react-image-galleryを選択してください。スライドショー機能やサムネイル表示が含まれており、簡単に設定できます。

  • react-image-lightbox:

    画像をフルスクリーンで表示したい場合や、モーダルウィンドウでの表示を重視する場合は、react-image-lightboxを選択してください。シンプルで直感的なインターフェースを提供します。

  • react-images:

    複数の画像を簡単に管理したい場合は、react-imagesを選択してください。画像の表示と管理が容易で、シンプルなAPIを提供します。

  • react-photo-gallery:

    レスポンシブデザインを重視する場合や、グリッドレイアウトでの表示が必要な場合は、react-photo-galleryを選択してください。柔軟なレイアウトオプションを提供します。

react-image-gallery のREADME

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