react-image-gallery vs react-photo-gallery
React 图片画廊库
react-image-galleryreact-photo-gallery

React 图片画廊库

React 图片画廊库用于在 React 应用程序中展示图像集合。它们提供了不同的功能和设计理念,以满足开发者在展示图像时的需求。选择合适的库可以帮助开发者更好地实现用户界面,提升用户体验。

npm下载趋势

3 年

GitHub Stars 排名

统计详情

npm包名称
下载量
Stars
大小
Issues
发布时间
License
react-image-gallery354,6363,932123 kB26 天前MIT
react-photo-gallery02,009-807 年前MIT

功能对比: react-image-gallery vs react-photo-gallery

功能丰富性

  • react-image-gallery:

    react-image-gallery 提供了许多功能,如自动播放、缩略图导航、全屏模式和自定义样式。它支持多种图像格式,并允许开发者通过 API 进行高度自定义,适合需要复杂交互的应用。

  • react-photo-gallery:

    react-photo-gallery 主要专注于图像的网格布局,提供简单的响应式设计。虽然功能较少,但它易于使用,适合快速实现基本的图像展示需求。

用户体验

  • react-image-gallery:

    react-image-gallery 提供流畅的用户体验,支持触控和键盘导航,适合移动设备和桌面端使用。它的动画效果和过渡效果增强了视觉吸引力。

  • react-photo-gallery:

    react-photo-gallery 以简单的网格布局展示图像,用户体验直观,适合快速浏览。虽然缺乏复杂的交互,但其简洁性使得用户容易上手。

自定义能力

  • react-image-gallery:

    react-image-gallery 允许开发者通过 props 进行深度自定义,包括样式、动画和事件处理。开发者可以根据项目需求调整图库的外观和行为。

  • react-photo-gallery:

    react-photo-gallery 提供基本的自定义选项,主要集中在布局和样式上。虽然不如 react-image-gallery 灵活,但对于简单的需求来说,足够满足。

学习曲线

  • react-image-gallery:

    由于其功能丰富,react-image-gallery 的学习曲线相对较陡,开发者需要花时间理解其 API 和配置选项。

  • react-photo-gallery:

    react-photo-gallery 的学习曲线较平缓,易于上手,适合新手和需要快速实现的项目。

性能

  • react-image-gallery:

    react-image-gallery 在处理大量图像时可能会面临性能挑战,开发者需要注意优化加载和渲染性能。

  • react-photo-gallery:

    react-photo-gallery 由于其轻量级的特性,在展示少量图像时性能表现良好,适合快速加载和响应。

如何选择: react-image-gallery vs react-photo-gallery

  • react-image-gallery:

    选择 react-image-gallery 如果你需要一个功能丰富的图库,支持幻灯片、缩略图和自定义样式,适合需要展示大量图片的场景。它提供了丰富的 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