React-spring-lightbox is a flexible image gallery lightbox with native-feeling touch gestures and buttery smooth animations.
- βοΈ
Mousewheel, swipe or click+drag to page photos - β¨οΈ Keyboard controls ββEsc
- π Ctrl +
MousewheelorTrackpad Pinchto zoom - π Double/Single-tap or double/single-click to zoom in/out
- π Pinch to zoom
- π Panning on zoomed-in images
- π Highly performant spring based animations via react-spring
- No external CSS
- Implement your own UI
- Supports IE 11, Edge, Safari, Chrome, Firefox and Opera
- Full typescript support
- Supports any
<img />attribute includingloading(lazy loading),srcsetandaria-*
yarn add react-spring-lightboxThe images prop now accepts a list of objects whose properties can be almost any valid React <img /> prop including srcset, loading (lazy loading) and aria-* attributes.
If you use typescript, the exact type can be imported from import { ImagesListType } from 'react-spring-lightbox';
importReact,{useState}from'react';importLightbox,{ImagesListType}from'react-spring-lightbox';constimages: ImagesListType=[{src: 'https://timellenberger.com/static/blog-content/dark-mode/win10-dark-mode.jpg',loading: 'lazy',alt: 'Windows 10 Dark Mode Setting',},{src: 'https://timellenberger.com/static/blog-content/dark-mode/macos-dark-mode.png',loading: 'lazy',alt: 'macOS Mojave Dark Mode Setting',},{src: 'https://timellenberger.com/static/blog-content/dark-mode/android-9-dark-mode.jpg',loading: 'lazy',alt: 'Android 9.0 Dark Mode Setting',},];constCoolLightbox=()=>{const[currentImageIndex,setCurrentIndex]=useState(0);constgotoPrevious=()=>currentImageIndex>0&&setCurrentIndex(currentImageIndex-1);constgotoNext=()=>currentImageIndex+1<images.length&&setCurrentIndex(currentImageIndex+1);return(<LightboxisOpen={true}onPrev={gotoPrevious}onNext={gotoNext}images={images}currentIndex={currentImageIndex}/* Add your own UI */// renderHeader={() => (<CustomHeader />)}// renderFooter={() => (<CustomFooter />)}// renderPrevButton={() => (<CustomLeftArrowButton />)}// renderNextButton={() => (<CustomRightArrowButton />)}// renderImageOverlay={() => (<ImageOverlayComponent >)}/* Add styling */// className="cool-class"// style={{ background: "grey" }}/* Handle closing */// onClose={handleClose}/* Use single or double click to zoom */// singleClickToZoom/* react-spring config for open/close animation */// pageTransitionConfig={{// from: { transform: "scale(0.75)", opacity: 0 },// enter: { transform: "scale(1)", opacity: 1 },// leave: { transform: "scale(0.75)", opacity: 0 },// config: { mass: 1, tension: 320, friction: 32 }// }}/>);};exportdefaultCoolLightbox;| Prop | Description |
|---|---|
| isOpen | Flag that dictates if the lightbox is open or closed |
| onClose | Function that closes the Lightbox |
| onPrev | Function that changes currentIndex to previous image in images |
| onNext | Function that changes currentIndex to next image in images |
| currentIndex | Index of image in images array that is currently shown |
| renderHeader | A React component that renders above the image pager |
| renderFooter | A React component that renders below the image pager |
| renderPrevButton | A React component that is used for previous button in image pager |
| renderNextButton | A React component that is used for next button in image pager |
| renderImageOverlay | A React component that renders within the image stage, useful for creating UI overlays on top of the current image |
| singleClickToZoom | Overrides the default behavior of double clicking causing an image zoom to a single click |
| images | Array of image objects to be shown in Lightbox |
| className | Classes are applied to the root lightbox component |
| style | Inline styles are applied to the root lightbox component |
| pageTransitionConfig | React-Spring useTransition config for page open/close animation |
Clone the repo
git clone https://github.com/tim-soft/react-spring-lightbox.git react-spring-lightbox
cd react-spring-lightboxSetup symlinks
yarn link
cd example
yarn link react-spring-lightboxRun the library in development mode
yarn startRun the example app in development mode
cd example
yarn devChanges to the library code should hot reload in the demo app
MIT Β© Tim Ellenberger