All Projects → VLZH → react-lightgallery

VLZH / react-lightgallery

Licence: MIT license
React wrapper for lightgallery.js

Programming Languages

javascript
184084 projects - #8 most used programming language
HTML
75241 projects
CSS
56736 projects

Projects that are alternatives of or similar to react-lightgallery

chaos-sticker-collection
A collection of chaos event / nerd culture related stickers.
Stars: ✭ 36 (-21.74%)
Mutual labels:  gallery
GelbooruEnhancement
Image Viewer and Endless Scroll userscripts for Gelbooru and various other boorus
Stars: ✭ 41 (-10.87%)
Mutual labels:  gallery
google-photos-vue
Google Photos album viewer built with Vue.js
Stars: ✭ 17 (-63.04%)
Mutual labels:  gallery
PrivateGalleryCreator
Create private extension galleries for Visual Studio
Stars: ✭ 96 (+108.7%)
Mutual labels:  gallery
ImagePicker
Android image picker
Stars: ✭ 17 (-63.04%)
Mutual labels:  gallery
zipline
A ShareX/file upload server that is easy to use, packed with features, and with an easy setup!
Stars: ✭ 215 (+367.39%)
Mutual labels:  gallery
Selfhosted-Google-Photos-Alternative
A complete guide on exiting Google, Amazon or any proprietary service Photos storage with all the features you would want.
Stars: ✭ 143 (+210.87%)
Mutual labels:  gallery
hicetnunc-radio
Radio player for audio tracks in a tezos wallet.
Stars: ✭ 23 (-50%)
Mutual labels:  gallery
django-content-gallery
A Django application allows to attach a collection of images to objects of any model in any app
Stars: ✭ 18 (-60.87%)
Mutual labels:  gallery
gallery
BentoML Example Projects 🎨
Stars: ✭ 120 (+160.87%)
Mutual labels:  gallery
react-pig
Arrange images in a responsive, progressive-loading grid managed in JavaScript using CSS transforms.
Stars: ✭ 47 (+2.17%)
Mutual labels:  gallery
eyy-indexer
An image and video friendly directory indexer for web directories.
Stars: ✭ 53 (+15.22%)
Mutual labels:  gallery
gallery-by-react
🖼️ 一个React实现的图片画廊(附详细项目说明)
Stars: ✭ 27 (-41.3%)
Mutual labels:  gallery
vuerollr
Mouseover gallery plugin for Vue.js
Stars: ✭ 23 (-50%)
Mutual labels:  gallery
osprey-delight
Osprey Delight is the free-minded artist's choice for a clutter-free and blazingly fast single-page portfolio.
Stars: ✭ 43 (-6.52%)
Mutual labels:  gallery
SkyGallery
Create galleries by uploading images and videos. Powered by Sia Skynet.
Stars: ✭ 23 (-50%)
Mutual labels:  gallery
embla-carousel-wheel-gestures
wheel interactions for Embla Carousel
Stars: ✭ 30 (-34.78%)
Mutual labels:  gallery
jekyll-photos
Dead simple solution to add a photo gallery to a Jekyll site.
Stars: ✭ 47 (+2.17%)
Mutual labels:  gallery
skeleton-carousel
Carousel component. Horizontal and vertical swipe navigation
Stars: ✭ 31 (-32.61%)
Mutual labels:  gallery
gatsby-image-gallery
Very basic gallery grid based on gatsby-image
Stars: ✭ 116 (+152.17%)
Mutual labels:  gallery

About

This package is react wrapper for: lightgallery.js

npm GitHub issues npm bundle size

Installation

yarn add react-lightgallery

or

npm install --save react-lightgallery

Run example

git clone [email protected]:VLZH/react-lightgallery.git
# go to the project folder
cd ./react-lightgallery
# install dependencies
yarn install
# run example
yarn start:example

Live demo

Edit react-lightgallery1

Usage

Import .css file in your code:

// some Root.js file
import "lightgallery.js/dist/css/lightgallery.css";

Add the provider to your a high-level component

// some Root.js file
import React from "react";
import { LightgalleryProvider } from "react-lightgallery";

class App extends React.Component {
    render() {
        return (
            <LightgalleryProvider
                lightgallerySettings={
                    {
                        // settings: https://sachinchoolur.github.io/lightgallery.js/docs/api.html
                    }
                }
                galleryClassName="my_custom_classname"
            >
                // your components
            </LightgalleryProvider>
        );
    }
}

The Provider is the manager of photo-groups in a case when you want to have several sets of photos, also this is settings storage for lightgallery.js

Wrap some elements by <LightgalleryItem>

// some PhotoItem.js file
import { LightgalleryItem } from "react-lightgallery";

const PhotoItem = ({ image, url, title }) => (
    <div>
        <LightgalleryItem group="any" src={image}>
            <a href={url}>
                <img src={image} />
                <ItemTitle>
                    <LinesEllipsis
                        text={title}
                        maxLine="2"
                        ellipsis="..."
                        trimRight
                        basedOn="letters"
                    />
                </ItemTitle>
            </a>
        </LightgalleryItem>
    </div>
);

Props

LightgalleryProvider

Prop Type Default Required Description
lightgallerySettings Object {} no Setting for lightgallery. More information
galleryClassName String "react_lightgallery_gallery" no Class name of gallery target element
portalElementSelector String body no Portal target element for adding divelement(lightgallery target element)
plugins String[] [ "lg-fullscreen.js", "lg-thumbnail.js", "lg-video.js", "lg-zoom.js" ] no List of enabled plugins

List of supported plugins

  • lg-autoplay.js
  • lg-fullscreen.js
  • lg-hash.js
  • lg-pager.js
  • lg-thumbnail.js
  • lg-video.js
  • lg-zoom.js
  • lg-share.j

Supported Events

You can access to events by using these props:

Prop Type
onAfterOpen Function
onSlideItemLoad Function
onBeforeSlide Function
onAfterSlide Function
onBeforePrevSlide Function
onBeforeNextSlide Function
onDragstart Function
onDragmove Function
onDragend Function
onSlideClick Function
onBeforeClose Function
onCloseAfter Function

Example of using events:

class App extends React.Component {
    render() {
        return (
            <LightgalleryProvider
                onAfterSlide={(event, lightgallery_object) => {
                    console.log(lightgallery_object);
                    console.log(
                        `Prev slide index: ${event.detail.prevIndex}; Current index: ${event.detail.index}`
                    );
                }}
            >
                // your components
            </LightgalleryProvider>
        );
    }
}

LightgalleryItem

Prop Type Default Required Description
group String undefined yes Name of group of photos set
src String undefined yes Url to image
thumb String same as src👆 no Url to image
downloadUrl String undefined no Link for download link
subHtml String undefined no id or class name of an object(div) which contain your sub html.
itemClassName String "react_lightgallery_item" no class name of wrapper(div) of children

HOCs and Hooks

⚠️ Note!
You should to use this HOCs and hooks only inside of LightgalleryProvider

useLightgallery

React hook that returns openGallery function for opening of a group.

Example

import React, { useCallback } from "react";
import { useLightgallery } from "react-lightgallery";

function MySuperButton({ group_name }) {
    const { openGallery } = useLightgallery();

    const open = useCallback(() => {
        openGallery(group_name, 5); // you must to define target group, index (second parameter) is optional
    }, [group_name]);

    return <button onClick={open}>Open gallery</button>;
}

withLightgallery

React HOC for providing openGallery function.

Example

import React, { useCallback } from "react";
import { withLightgallery } from "react-lightgallery";

@withLightgallery
class MySuperButton(){
    open = () => {
        this.props.openGallery("very_cool_group")
    }

    render() {
        return <button onClick={this.open}>Open gallery</button>;
    }
}

TODO

  • Rewrite to typescript
  • Remove lightgallery.js and plugins imports and provide this job to user(developer) (new major version)
  • Write tests
  • Support of video
  • Access to specific events through LightgalleryItem, like: onOpen, onLeave, onEnter
  • More options from lightgallery for LightgalleryItem
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].