React Image Gallery
Live Demo (try it on mobile for swipe support)
linxtion.com/demo/react-image-gallery

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 (with webpack)
# SCSS
@import "~react-image-gallery/styles/scss/image-gallery.scss";
# CSS
@import "~react-image-gallery/styles/css/image-gallery.css";
Example
Need more example? Seeexample/app.js
import ImageGallery from "react-image-gallery";
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,
- `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, defaulttrue
lazyLoad
: Boolean, defaultfalse
showNav
: Boolean, defaulttrue
showThumbnails
: Boolean, defaulttrue
thumbnailPosition
: String, defaultbottom
top, right, bottom, left
showFullscreenButton
: Boolean, defaulttrue
useBrowserFullscreen
: Boolean, defaulttrue
useTranslate3D
: Boolean, defaulttrue
translate
instead of translate3d
css property to transition slidesshowPlayButton
: Boolean, defaulttrue
isRTL
: Boolean, defaultfalse
showBullets
: Boolean, defaultfalse
showIndex
: Boolean, defaultfalse
autoPlay
: Boolean, defaultfalse
disableThumbnailScroll
: Boolean, defaultfalse
disableKeyDown
: Boolean, defaultfalse
disableSwipe
: Boolean, defaultfalse
disableThumbnailSwipe
: Boolean, defaultfalse
onErrorImageURL
: String, defaultundefined
indexSeparator
: String, default' / '
, ignored ifshowIndex
is falseslideDuration
: Number, default450
swipingTransitionDuration
: Number, default0
slideInterval
: Number, default3000
slideOnThumbnailOver
: Boolean, defaultfalse
flickThreshold
: Number (float), default0.4
swipeThreshold
: Number, default30
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, defaultfalse
startIndex
: Number, default0
onImageError
: Function,callback(event)
onThumbnailError
: Function,callback(event)
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)
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,
renderCustomControls
: Function, custom controls rendering
_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 implementationrenderThumbInner
: 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 referencerenderLeftNav
: Function, custom left nav component
<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
```javascript
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
```javascript
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
```javascript
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
```javascriptrenderFullscreenButton: (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 refsplay()
: plays the slidespause()
: pauses the slidestoggleFullScreen()
: toggles full screenslideToIndex(index)
: slides to a specific indexgetCurrentIndex()
: 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