Swiffy-slider - Super fast carousel and slider with touch for optimized websites running in modern browsers.

Overview

Swiffy Slider Logo

Swiffy Slider

Super fast lightweight carousel and slider with touch for optimized websites running in modern browsers.
Explore Swiffy Slider docs »

See examples · Visual carousel and slider configuration

version npm version CSS gzip size CSS Brotli size JS gzip size JS Brotli size

Swiffy Slider

Super fast carousel and slider with touch for optimized websites running in modern browsers.

Modern browser offers really good options these days to create much better user experience for sliders and carousels than existing libraries offer.

This project utilizes what is available in modern browsers resulting in a super lightweight and fast slider, greatly reducing the javascript footprint and increase performance to meet todays standards.

  • Navigate with Touch, Keyboard, trackpad, pen and Mouse - because it is just browser scrolling
  • Uses native browser scroll behavior, scroll-snap and CSS grid to provide the best mobile and touch experience
  • Can run in CSS only mode - no js for even better performance
  • SEO friendly - all content is in pure markup
  • WCAG friendly - all content is in pure markup and can be annotated accordingly, supports tabbing, keyboard navigation, aria attributing and all what is needed.
  • Setup is done in pure markup and css classes, no scripting required
  • No js loading of slides, configuration or initialization
  • Vanilla javascript, less than 1.3kb ~110 lines
  • Very low overall footprint ~3.5kb in total (css+js gzip'ed)

Table of contents

Quick start

1. Add CSS and JS to website head section

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/swiffy-slider.min.js" defer>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/swiffy-slider.min.css" rel="stylesheet">

2. Add markup

<div class="swiffy-slider slider-item-helper">
    <ul class="slider-container">
        <li>Slide 1</li>
        <li>Slide 2</li>
        <li>Slide 3</li>
    </ul>

    <button type="button" class="slider-nav"></button>
    <button type="button" class="slider-nav slider-nav-next"></button>

    <div class="slider-indicators">
        <button class="active"></button>
        <button></button>
        <button></button>
    </div>
</div>

Swiffy Slider script automatically binds to all .swiffy-slider instances

Additional installation options

  • Download the latest release
  • Clone the repo: git clone https://github.com/dynamicweb/swiffy-slider.git
  • Install with npm: npm install swiffy-slider
  • Install with yarn: yarn add swiffy-slider

Read the Getting started page for examples, configuration options and a visual configurator.

Features

  • Carousel - Slide any content. Images, cards, videos, text, banners, posters, anything markup
  • Carousel - Slide using touch, keyboard, mouse or navigation buttons
  • Carousel - 1, 2, 3, 4, 5 or 6 slides visible in the slider wrapper
  • Carousel - snap to start or center slide items
  • Carousel - Slide one item or entire page on navigate when showing more than one
  • Carousel - Partially reveal next and previous (optional) slide to indicate touch scroll is available
  • Carousel - Loop to start when slides end
  • Navigation - 7 built in navigation styles for next and previous navigation in light or dark mode, 14 in total
  • Navigation - Overlay or outside navigation options
  • Navigation - Show navigation arrows on hover or always. Show on desktop, but not touch
  • Indicators - 3 built in indicator styles; pin, dots or squares in light or dark mode
  • Indicators - Overlay or outside location of indicators
  • Indicators - Navigate to slide by clicking indicator
  • Auto play - Automatically slide with specified interval
  • Auto pause - Stop playing when mouse is hovering carousel or touch is used
  • Animation - Add animations when slides slide into view
  • Animation - Choose between 6 different animations
  • Animation - Use normal, fast or slow animations
  • Scripting - Automatic or manual initialization of slider instances using swiffyslider.init or swiffyslider.initSlider
  • Scripting - Execute scripts when an item is done sliding using swiffyslider.onSlideEnd
  • Scripting - Start and stop automatic sliding using script

What's included

Within the download you'll find the following directories and files. You'll see something like this:

swiffy-slider/
├── dist/
│   ├── css/
│   │   ├── swiffy-slider.min.css
│   │   ├── swiffy-slider.min.css.map
│   ├── js/
│   │   ├── swiffy-slider.ESM.min.js
│   │   ├── swiffy-slider.ESM.min.js.map
│   │   ├── swiffy-slider.min.js
│   │   ├── swiffy-slider.min.js.map

The download contains compiled and minified CSS and JS (swiffy-slider.min.*). source maps (swiffy-slider.*.map) are available for use with certain browsers' developer tools.

Bugs and feature requests

Have a bug or a feature request? Check out the issues section and see if your issue or idea is already created. If your problem or idea is not addressed yet, please open a new issue.

Documentation

Swiffy slider documentation website is part of this repo and can be found in the docs folder. Visit the doc on our github documentation page

Introduction

Swiffy slider is a wrapper defined in html with slides, navigation and indicators as its children.

All options and behavior is controlled with css classes that is added to the wrapper. No js configuration.

The wrapper is the .swiffy-slider element - options to control layout and behavior of slides, navigation and indicators are added to this element.

Markup structure

The slider markup is a .swiffy-slider wrapper that has 3 sections.

  • One .slider-container that contains the slides
  • Two .slider-nav buttons that is navigation buttons previous and next (optional)
  • One .slider-indicators that contains the indicators (optional)
<div class="swiffy-slider [slider options] [navigation options] [indicator options]" data-slider-nav-autoplay-interval="3000">
    <ul class="slider-container">
        <li>Slide 1</li>
        <li>Slide 2</li>
    </ul>

    <button type="button" class="slider-nav"></button>
    <button type="button" class="slider-nav slider-nav-next"></button>
    
    <div class="slider-indicators">
        <button class="active"></button>
        <button></button>                
    </div>    
</div>

This example uses ul>li for slides. Can also be i.e. div or other elements. This example uses button for navigation. Could also be divs, but cannot be ul>li as that would be nested. This example uses div>button for indicators but could be other elements, i.e. ul>li structure instead. Wether to use buttons or div for the navigating elements, depends on how WCAG needs to be handled.

Slider options (CSS Classes)

Options are the css classes that can be added to the .swiffy-slider element to control how the slider will look and behave. No config in JS or similar.

The example below use the .slider-item-show2 option to show 2 slides and .slider-item-reveal to reveal part of the next and previous slide. By adding additional classes behavior and layout is controlled.

Head over to the configurator to try all options

<div class="swiffy-slider slider-item-show2 slider-item-reveal">
    <ul class="slider-container">
        <li>Slide 1</li>
        <li>Slide 2</li>
        <li>Slide 3</li>
    </ul>
</div>

Slider wrapper

Change behavior and styles on slides, navigation and indicators by adding option css classes to the .swiffy-slider wrapper.

CSS class
_______________________________
Description
_______________________________
swiffy-slider The overall wrapper of the slider instance. Should be a block element. Can contain 3 different things as direct children; slider-container, slider-indicators and slider-nav

Slider sections

For possible child elements to the swiffy-slider wrapper. These sections adds slides, navigation and indicators

CSS class
_______________________________
Description
_______________________________
slider-container
  • Creates the scrollable container that holds the slides
  • Can be any element and is a CSS grid
  • Using a ul>li structure for the container and slides provides good semantics
  • The direct descendants of this element are the slides them selves and can hold any markup
  • The width of the slides are controlled by the slider options. Default is 100% width
  • Can be styled using slider-item-* options
slider-nav
slider-nav-next
  • Creates a navigation button
  • Should be button element and there should be exactly 2
  • Default is a left button
  • Add slider-nav-next to make the next button
  • Can be styled using slider-nav-* options
slider-indicators
  • Creates a container for indicator buttons
  • The direct descendants of this element are the indicators. Add active for the active indicator for first load
  • Descendants should be button elements and there should be one button per slide or per page when showing more than one slide
  • Can be styled using slider-indicators-* options

Slider options

For the swiffy-slider wrapper. The slider-item-* option classes affects the slides (The slider-container children)

CSS class
_______________________________
Description
_______________________________
slider-item-show2
slider-item-show3
slider-item-show4
slider-item-show5
slider-item-show6
Shows 2, 3, 4, 5 or 6 slides at a time in the slider wrapper. Each slide is either 1/2, 1/3, 1/4, 1/5 or 1/6 of the slider wrapper width.
slider-item-reveal Reveals some of previous and next slide. Each slide is either 1/1, 1/2, 1/3, 1/4 or 1/6 of the slider wrapper width minus a little to reveal next and previous slides
slider-item-ratio Enables ratio sizing of the slide elements. Default ratio is 2:1 or 50% meaning the slides have half the heigh of their width. This option sets object-fit:cover; on first element inside the slide element - to stretch images to fill out the slide box and keep aspect ratio.
slider-item-ratio-32x9
slider-item-ratio-21x9
slider-item-ratio-2x1
slider-item-ratio-16x9
slider-item-ratio-4x3
slider-item-ratio-1x1
slider-item-ratio-3x4
Controls the slide ratio when ratio is enabled. Default ratio is 2:1 or 50% meaning the slides have half the heigh of their widt.
slider-item-ratio-contain Sets the content of a ratio enabled slide to have object-fit:contain; instead of default object-fit:cover;. This ensures that if the content of the slide is an image or embedded video, it is scaled down so all is visible within the slide box.
slider-item-nogap Removes the horisontal gap between slides
slider-item-snapstart Snaps slides to start of the slider wrapper instead of center when using .slider-item-reveal
slider-item-nosnap Removes auto snapping for slides so they slide freely. Primarily have an affect on touch devices as navigating with arrows and indicators is per slide or per page
slider-item-nosnap-touch Same effect as slider-item-nosnap but only on devices that has a primary input which is not a mouse, i.e. mobile media (hover: none)
slider-item-helper For debugging: Adds a test layout to slide items; minimum height, background color, centers content and background. Meant for testing and should be removed in real code

Navigation options

For the swiffy-slider wrapper. The slider-nav-* option classes affects the slider-nav elements

CSS class
_______________________________
Description
_______________________________
slider-nav-page Slides entire page when showing more than one slide item on the slider wrapper. Default behavior moves just one slide to the left or right
slider-nav-noloop Disables slider loop - so when on last slide navigate next does not take the user to the first slide
slider-nav-nodelay Disables smooth scrolling when sliding using navigation buttons, indicators and autoplay. Makes the new slide or page appear instantly with no scroll smoothing. Does not affect touch navigation
slider-nav-autoplay Automatically slide to next slide or next page in intervals. Default is 2500 ms = 2.5s
data-slider-nav-autoplay-interval attribute Changes the default autoplay interval - value is in ms. data-slider-nav-autoplay-interval="3000". Default value is 2500, minimum value is 750 ms
slider-nav-autopause Stops and restarts the autoplay when mouse is hovering the slider wrapper or when it is touched on touch devices. Will restart on mouseout, but not when touch ends
slider-nav-round Changes the default navigation arrows to a circle with arrow. Default color is white with black arrow
slider-nav-touch Shows navigation buttons on touch devices. By default navigation buttons are hidden on touch devices using the media (hover: none) query. By adding this option, the navigation buttons are always visible on touch devices
slider-nav-visible Makes the nav buttons visible always. By default navigation buttons are hidden until the slider wrapper is hovered
slider-nav-outside Moves the navigation buttons outside the slider wrapper and shrinks the width of the slider wrapper accordingly (by 3 or 5 rem on each side depending on navigation style)
slider-nav-outside-expand Moves the navigation buttons outside the slider wrapper by applying negative margins (-3 or -5 rem) so the slides and wrapper keeps their size. The navigation buttons overlays surrounding content.
slider-nav-scrollbar Makes the scrollbar for the .slider-container visible. Acts as indicator and navigation if running in css only mode. On touch devices the scrollbar is not shown when not sliding because that is how the browser behaves
slider-nav-dark Changes the navigation buttons to a dark version. Black arrows or black circle with white arrows

Indicator options

For the swiffy-slider wrapper. The slider-indicators-* option classes affects the slider-indicators child elements

CSS class
_______________________________
Description
_______________________________
slider-indicators-round Changes the default indicators to a circle
slider-indicators-square Changes the default indicators to a square
slider-indicators-outside Moves the indicator buttons under the slider wrapper and increases the height of the slider wrapper but not the slides them selves
slider-indicators-dark Changes the indicator buttons to a dark version
slider-indicators-highlight Hightlights the active indicator even more by increasing its size
slider-indicators-sm Shows indicator buttons on small devices under 992px in width. By default indicator buttons are hidden on small devices. By adding this option, the indicators buttons are always visible. Since the number of indicators and number of slides does not match on small devices when showing more than one item per page, do not use this option in that case

Animation options

For the swiffy-slider wrapper. The slider-nav-animation-* option classes affects the animation of slides when they slide into view.

CSS class
_______________________________
Description
_______________________________
slider-nav-animation Enables animation on slides. An animation effect class is also required for animation to be enabled
slider-nav-animation-appear Apear animation using opacity and scale - starting from 30% opacity and a 90% scale
slider-nav-animation-fadein Fade in animation using opacity - starting from 50% opacity. Can be combined with .slider-nav-animation-scale/scaleup
slider-nav-animation-scale Scale up animation using scale - starts with 90% size. Can be combined with .slider-nav-animation-fadein
slider-nav-animation-scaleup Scale up animation using scale - starts with 25% size. Can be combined with .slider-nav-animation-fadein
slider-nav-animation-turn Turn animation using rotateY - starts with 70deg ratotation
slider-nav-animation-slideup Slide up animation using translateY - starts at 60% of the height
data-slider-nav-animation-threshold attribute Changes the default animation threshold - value is between 0-1. data-slider-nav-animation-threshold="0.3". Default value is 0.3. This setting defines how many percent of a slide should be visible before the animation starts

Javascript

The Swiffy Slider script can be accessed using window.swiffyslider or simply swiffyslider

All options and behavior is handled by the css classes, so using the scripts directly is only for more advanced scenarios.

Method
_______________________________
Description
_______________________________
swiffyslider.version; Needs no explanation :-)
swiffyslider.init(rootElement = document.body); Initializes all instances of .swiffy-slider elements and binds events to handle navigation, indicators and autoplay. By default document.body is searched for instances, but can be limited further to i.e. content area (and skip header, navigation, footer etc) to further improve init performance.
swiffyslider.initSlider(sliderElement); Initializes one instance of swiffy slider wrapper. The passed element has to be a .swiffy-slider element
swiffyslider.slide(sliderElement, next = true); Slides to the next slide or next page depending on the nav settings. The passed slider element has to be a .swiffy-slider element. By default this method slides next, but call it with false to slide to previous
swiffyslider.slideToByIndicator(); This method is called when an indicator button is clicked. Should not be called directly. Instead call slideTo
swiffyslider.slideTo(sliderElement, slideIndex); Slides to the specified slide (index starts with 0 for first slide). The passed slider element has to be a .swiffy-slider element.
swiffyslider.onSlideEnd(sliderElement, delegate, timeout = 125); Provide a callback/delegate function to get called when sliding ends. The default timeout is 125ms and should not be too low as it could cause the delegate to be called more than once on each scroll. The passed slider element has to be a .swiffy-slider element.
swiffyslider.autoPlay(sliderElement, timeout, autopause); Manually starts autoplay for a container using the specified timeout. Autopause can be enabled. Usually auto play is handled using css option classes. This method can be used to start autoplay when the slider scrolls into view or similar. The passed slider element has to be a .swiffy-slider element.
swiffyslider.handleIndicators(sliderElement); Manually updates the indicators active state to reflect the current position of the slider. The passed slider element has to be a .swiffy-slider element.

Listening for sliding ends for a container

<script>
const sliderElement = document.getElementById('myslider');
swiffyslider.onSlideEnd(sliderElement, function() {
    console.log('Scrolling stopped');
});
</script>

Listening for sliding ends for a container and find visible slides

<script>
window.addEventListener(&#39;load&#39;, () =&gt; {
    const sliderElement = document.getElementById(&#39;myslider&#39;);
    swiffyslider.onSlideEnd(sliderElement, function() {
        const visibleSlideElements = getVisibleSlides(sliderElement);
        const visible = [];
        for (const slide of visibleSlideElements) {
            visible.push(slide.innerText);
        }
        console.log(visible);
        console.log(visibleSlideElements);
    });
});

function getVisibleSlides(sliderElement) {
    const container = sliderElement.querySelector('.slider-container');
    //returns an array of slide elements that are fully or partially visible
    const visibleSlides = [];
    //We are using a grid layout and the slides left and right properties include the width of the gap, so when comparing with container width add a gap for each side of the slide gap.
    const gapWidth = parseInt(window.getComputedStyle(container).columnGap);
    for (const slide of container.children) {
        var slideScrollLeftPosition = slide.getBoundingClientRect().left - container.getBoundingClientRect().left;
        var slideScrollRightPosition = slideScrollLeftPosition + slide.offsetWidth - gapWidth;
        if (slideScrollLeftPosition &gt;= 0 &amp;&amp; slideScrollRightPosition &lt;= container.offsetWidth) {
            visibleSlides.push(slide);
        }
    }
    return visibleSlides;
}
</script>

Javascript loading and binding

Avoid autobinding by adding data-noinit attribute on the script tag and then attach the slider manually

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/swiffy-slider.min.js" data-noinit defer>
<script>
    window.addEventListener('load', () => {
        //Use only one of the loading options below!
        //loads all sliders
        swiffyslider.init();
        //loads specific slider
        swiffyslider.initSlider(document.getElementById('myslider'));
    });
</script>
<div class="swiffy-slider" id="myslider">
  <div class="slider-container">
    <div></div>
  </div>
  ...
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/swiffy-slider.min.js" data-noinit defer>
<script>
    window.addEventListener('load', () => {
        //loads all sliders in main and skip header and footer search for increased init performance.
        swiffyslider.init(document.getElementById('content'));
    });
</script>
<header>...</header>
<main id="content">
  <div class="swiffy-slider" id="myslider">
    <div class="slider-container">
      <div></div>
    </div>
    ...
  </div>
</main>
<footer>...</footer>

Load as module using ES version of the script

<script type="module">
    import {swiffyslider} from 'https://cdn.jsdelivr.net/npm/[email protected]/dist/js/swiffy-slider.ESM.min.js'; 
    window.swiffyslider = swiffyslider; 
    window.swiffyslider.init(); 
</script>

Load as ES module on demand, here using load - could be when slider scrolls into view or navigation arrow is clicked the first time. Load module and initialize sliders.

<script>
window.addEventListener("load", () => {
    import ('https://cdn.jsdelivr.net/npm/[email protected]/dist/js/swiffy-slider.ESM.min.js').then((swiffysliderModule) => {
        swiffysliderModule.swiffyslider.init();
    });
});
</script>

Load as ES module on demand. Load module and assign to window for later script manipulation of slides

<script>
window.addEventListener("load", () => {
    import ('https://cdn.jsdelivr.net/npm/[email protected]/dist/js/swiffy-slider.ESM.min.js').then((swiffysliderModule) => {
        window.swiffyslider = swiffysliderModule.swiffyslider;
        window.swiffyslider.init();
    });
});
</script>

CSS variables

The Swiffy Slider CSS is making use of a number of CSS variables that can be overriden to control behavior and styling

Slide sizes, ratios, navigation etc. can be controlled by overruling the variable on the .swiffy-slider instance or in custom css.

Variable Example Description
--swiffy-slider-item-width --swiffy-slider-item-width:75%; Calculated based on the number of slides shown, the gap, reveal etc. Should not be overriden. INFO If needed, it has to be overriden on the .slider-container element.
--swiffy-slider-item-gap --swiffy-slider-item-gap:25px; Changes the gap between slides when enabled. Default --swiffy-slider-item-gap is 1rem, but can be any valid CSS mesurement. The --swiffy-slider-item-gap is part of the calculation of --swiffy-slider-item-width
--swiffy-slider-item-reveal --swiffy-slider-item-reveal:20%; Changes the width of the reveal of next and previous slides when enabled. Default --swiffy-slider-item-reveal is 8rem if previous and next is revealed and 4rem if only next is revealed (if .slider-item-snapstart is in use). The --swiffy-slider-item-reveal is part of the calculation of --swiffy-slider-item-width
--swiffy-slider-item-ratio --swiffy-slider-item-ratio:100/33.3 Sets the ratio to a custom value. Use with .slider-item-ratio and omit use of any .slider-item-ratio-* classes
--swiffy-slider-item-count --swiffy-slider-item-count:8; Sets the number of slides to show - same as using .slider-item-show{n} but can i.e. be set to a number higher than 6 if needed.
--swiffy-slider-nav-light --swiffy-slider-nav-light:lightcyan; Sets the light color for navigation arrows. Default is #fff. Use to control the color of light navigation. Square and Round navigation use both colors - one for backgrond, the other for arrow color.
--swiffy-slider-nav-dark --swiffy-slider-nav-dark:darkolivegreen; Sets the dark color for navigation arrows. Default is #333. Use to control the color of dark navigation. Square and Round navigation use both colors - one for backgrond, the other for arrow color. Can be any color variable.
--swiffy-slider-nav-zoom --swiffy-slider-nav-zoom:1.25; Use to overrule the navigation arrow sizes. Default is 1 for normal sizes and .75 for small sized navigation. Set to i.e. 1.25 to make navigation arrows larger.
--swiffy-slider-track-opacity --swiffy-slider-track-opacity:0.25; Sets the scrollbar track opacity when scrollbar is displayed
--swiffy-slider-track-height --swiffy-slider-track-height:1rem; Sets the scrollbar track height. Default is .5rem if scrollbar (.slider-nav-scrollbar) is enabled.
--swiffy-slider-animation-duration --swiffy-slider-animation-duration:0.75s Sets the animation duration. Default is 0.75s. Using .swiffy-slider-animation-fast sets the duration to .25s. Using .swiffy-slider-animation-slow sets the duration to 1.25s
--swiffy-slider-animation-delay --swiffy-slider-animation-delay:0.5s; Sets the delay before animation begins when a new slide scrolls into view. Default is 0s (no delay).
--swiffy-slider-animation-timing --swiffy-slider-animation-timing:ease-in-out; Sets the animation timing method, default is ease-in-out.

Example

<div class="swiffy-slider slider-item-reveal slider-item-ratio slider-nav-round slider-nav-visible" 
style="
--swiffy-slider-item-ratio:100/33.3;
--swiffy-slider-nav-light:lightcyan;
--swiffy-slider-nav-dark:darkolivegreen;
--swiffy-slider-nav-zoom:.85;
--swiffy-slider-item-reveal:25%;">

    <ul class="slider-container">
        <li>...</li>
    </ul>

    <button type="button" class="slider-nav"></button>
    <button type="button" class="slider-nav slider-nav-next"></button>

    <div class="slider-indicators">
        <button class="active"></button>
        <button></button>
        <button></button>
    </div>
</div>

Safari smooth scrolling polyfill

Sliding the carousel on touch devices using fingers are not affected by this issue.

When sliding using buttons, indicators and javascript, the new slides are shown instantly with no smoothing when using Safari.

In Safari based browsers, smooth scrolling is not supported because it is still lacking browser support. See Can I use

If you want to support smoooth scrolling on Safari based browsers, add this polyfill to your head section

<script src="https://unpkg.com/smoothscroll-polyfill/dist/smoothscroll.min.js"></script>

Limitations

These limitations are known and intentionally there to keep this library small, fast and smooth.

  • Scroll speed comes in 2 flavors - instant or 'smooth'. This is because that is what browsers support out of the box using CSS scroll-behavior. See MDN
  • Does not support slides of uneven widths. The width is controlled by the width of the wrapper and can have 1-6 slides per page depending on configuration.
  • Smooth scrolling is not supported out of the box in Safari (iOS + Mac) but can be fixed using a polyfill. See polyfill
  • RTL is untested but as the entire slider is just markup, it should be supported very well
  • Works in 'modern' browsers from the last ~3 years only. No IE support or anything funny.

Use other sliders and carousels if these limitations is important in your project.

Contributing

You are more than welcome to contribute by opening issues and create pull requests. Keep in mind that this project is meant to be very simple in nature and support recent browsers only.

This project is not going into a race of adding as many features as possible - but quite the opposite. Performance and filesize has high priority.

The general rule is, that Swiffy Slider is covering the most common usages, and that more exotic usages are made in examples. If not at least 50% of all installations need a feature, the feature probably belong somewhere else.

Examples of more exotic use cases are more than welcome as part of the examples, so please create pulls for that.

Open tasks that you could help with:

  • Svelte component
  • Vue component
  • React component

Thank you for your understanding.

Star gazers

Feel free to star this project and help spread the word.

Stargazers repo roster for @dynamicweb/swiffy-slider

Versioning

See the Releases section of our GitHub project for changelogs for each release version of Swiffy Slider.

Creators

Nicolai Høeg Pedersen

Dynamicweb

Copyright and license

Code and documentation copyright 2021 the Swiffy Slider Authors and Dynamicweb A/S Code released under the MIT License. Docs released under Creative Commons.

Comments
  • Two clicks to jump from the last slide to the first when

    Two clicks to jump from the last slide to the first when "Mouse draggable" is active

    Hi,

    when "Mouse draggable" is set, the last slide switches to the first slide after repeated mouse click only. The first click on the right arrow makes the slide twitch a bit, and it switches only after the second click.

    Tested on the latest FF, Chrome, and Chrome Canary.

    You can check it on the first example from the Configurator with these settings.

    Unfortunately, it isn't reproduced all the time on the configurator page, but I have this issue 100% of the time on my test page. I can email it to you if that's ok.

    bug documentation 
    opened by pneumotube 12
  • Differents height for images

    Differents height for images

    Is your feature request related to a problem? Please describe. For a web application, we let users upload images, but we end up with images of different sizes

    Describe the solution you'd like It is possible to have a height that changes according to the size of the images rather than the size of the images ?

    Additional context At the end of this slider, there is an example of Autoheight

    I like your slider, very easy to use :)

    question 
    opened by Vanlen1er 10
  • No loop in Chromium with zoom/scaling

    No loop in Chromium with zoom/scaling

    The loop stops working when the browser is zoomed out or in (and with some zoom levels it still loops) or when OS is set up to interface scaling. Maybe it has something to do with grid-auto-columns.

    Applies to at least Chrome, Edge.

    bug wontfix 
    opened by pneumotube 5
  • Autoplay don't work on mobile

    Autoplay don't work on mobile

    Describe the bug The slider work fine on desktop and on the adaptative view on desktop, but on my mobile the autoplay don't work, i see only the first image. (scroll works)

    Smartphone (please complete the following information):

    • Device: S20fe and iPhone XR
    • OS: iOS 16, android 13
    • Browser: Safari, chrome and firefox

    Additional context www.eliot.fr

    opened by Vanlen1er 4
  • Script skips images

    Script skips images

    Describe the bug On a 5 image-slider, the script skips 2 and 4. You can see that the button list below is visited only on 1, 3 and 5. Why?

    CleanShot 2022-04-21 at 08 15 11

    The code is as follows:

    <div id="employees" class="swiffy-slider slider-nav-outside slider-nav-visible slider-nav-nodelay slider-nav-autoplay slider-nav-autopause slider-item-show1 slider-indicators-outside slider-nav-animation slider-nav-animation-fadein slider-nav-animation-slow slider-item-last-visible" data-slider-nav-autoplay-interval="5000"> <ul class="slider-container"> <li class="employee"> <img src="https://info.spiria.com/hubfs/Erika.png" alt="Erika"> <div> <div id="hs_cos_wrapper_module_165049619677012_" class="hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_inline_text" style="" data-hs-cos-general-type="widget" data-hs-cos-type="inline_text" data-hs-cos-field="employee_title"></div><br>Erika </div> </li> [...] </ul> <button type="button" class="slider-nav"></button> <button type="button" class="slider-nav slider-nav-next"></button> <div class="slider-indicators"> <button class=""></button> <button></button> <button class=""></button> <button></button> <button class="active"></button> </div> </div>

    The script is fired this way:

    window.addEventListener('load', () => { swiffyslider.initSlider(document.getElementById('employees')); });

    question 
    opened by GuyVervilleSpiria 4
  • Standard Sass and CSS import doesn't seem to be working?

    Standard Sass and CSS import doesn't seem to be working?

    Hi, I couldn't find documentation on how to import the CSS files outside of JS. I see there's another similar issue over here: https://github.com/dynamicweb/swiffy-slider/issues/24 (I'm currently using version 1.5.1, which should have fixed that).

    Currently, doing @import "swiffy-slider"; or @import swiffy-slider/dist/css/swiffy-slider; causes a whole lot of problems with Vite.js (which uses esbuild under the hood). For instance:

    Error: Missing "./dist/css/swiffy-slider" export in "swiffy-slider" package
    
    Error: Failed to resolve entry for package "swiffy-slider". 
    The package may have incorrect main/module/exports specified in its package.json: 
    Failed to resolve entry for package "swiffy-slider"
    

    PS.: This might not have anything to do with it, but after looking at other packages, I notice that style and exports don't usually start with ./.

    bug 
    opened by thiagomajesk 4
  • [Feature Request] Ken burns / zoom slide effect when showing

    [Feature Request] Ken burns / zoom slide effect when showing

    Please add the ability to make the slides zoom while displaying Example I found on codepen: https://codepen.io/ibanez182/pen/LZPgrY

    Also for ADA/WCAG, please allow a pause button option

    Otherwise this slider is the best modern slider! Thank you

    enhancement question 
    opened by Todd0042 4
  • automatic and responsive indicators

    automatic and responsive indicators

    Is your feature request related to a problem? Please describe. could not find any solution where indicators are automatically and responsively generated according number of slides

    Describe the solution you'd like calculate number of "pages" and insert the same amount of indicators to DOM accordingly

    Describe alternatives you've considered none :)

    Additional context currently it's hardcoded and thus not responsive

    question 
    opened by sKopheK 3
  • Random Scrollposition

    Random Scrollposition

    Describe the bug The position of the scrollbar is random and changes upon refresh.

    To Reproduce

    1. Go to https://lautstark-jrk.de/
    2. Scroll down to sliders
    3. Check scroll positions
    4. Refresh to see changing random position

    Expected behavior With class slider-item-snapstart the scrollposition should be start, not a random position.

    Screenshots screenshot-lautstark-jrk de-2022 10 11-09_37_12

    https://user-images.githubusercontent.com/4689792/195025647-dde076da-6c94-4aff-8a10-a22d1d7ed787.mp4

    Desktop

    • OS: Windows
    • Browser: Chrome
    • Version 106.0.5249.103

    Problem seems not to occur on the following setups IOS Safari & Chrome Windows Firefox

    opened by straightvisions-matthias-bathke 3
  • undefined is not an object

    undefined is not an object

    Describe the bug We use error tracking software on our website and an event that is popping up regualrly relates to

    'undefined is not an object' f(t&&Object.prototype.hasOwnProperty.call(t,"addEventListener")){T(t,"addEventListener",function(o){var i={component:"".concat(e,".prototype

    Crashed in non-app: ./node_modules/swiffy-slider/src/swiffy-slider.esm.js in handleIndicators

    To Reproduce unfortunatly we cannot provide steps to reproduce due to it been an intermittent issue.

    Expected behavior expected it not to occur?

    Screenshots N/A

    Desktop (please complete the following information):

    • Majority on Safari v15+
    • Mac (18%)

    Smartphone (please complete the following information):

    • Safari Mobile 15.5 and 15.6 (57%)
    • Iphone (74%)

    Additional context Our application is on NEXTJS.

    and example of how swiffy is rendered in a component.

    import React, { useState, useEffect, useRef } from 'react';
    import Link from 'next/link';
    import Container from '../../Container';
    import Image from 'next/image';
    import Headings from '../../heading/Heading';
    import { swiffyslider } from 'swiffy-slider';
    
    function Classic({ data, title, cta }) {
      const { _metadata, content } = data.classic;
    
      const sliderRef = useRef()
    
      let dotsClass = 'desktop:hidden bg-dark'
    
      useEffect(() => {
        swiffyslider.initSlider(sliderRef.current)
      }, [])
    
      return (
        <section id={_metadata.uid} className="content-list bg-dawn-grey-10 standard-padding">
          <Container fullPage={false}>
            <Headings headingContent={title} headingClassName='h4 md:h2 text-center mx-12 mb-10' />
            <div className="block md:flex flex-row flex-wrap w-full justify-between mx-auto">
              <div className={`content-list-slider swiffy-slider slider-nav-autoplay slider-nav-visible slider-indicators-sm`} data-slider-nav-autoplay-interval={3000} ref={sliderRef}>
                <ul className="slider-container" tabIndex={0}>
                  {content.map((item, index) => {
    
                    return (
                      <li className="flex-1 px-4 mb-2.5" key={index}>
                        <div className="relative">
                          <Image
                            src={`${item.image.url}?disable=upscale`}
                            width={274}
                            height={204}
                            objectFit={"cover"}
                            layout={"responsive"}
                            alt={item.image.title.replace(/\.[^/.]+$/, "")}
                          />
                        </div>
                        {item.overlay_content.show_overlay == true && item.overlay_content.show_icon == true ? <OverlayIcon icon={item.overlay_content.icon} /> : ""}
                        {item.overlay_content.show_overlay == true && item.overlay_content.show_icon == false ? <OverlayText text={item.overlay_content.text} /> : ""}
    
                        <h3 className="sh10 md:sh9 text-center mb-2">{item.title}</h3>
                        <p className="text-center max-w-sm mx-auto body-r">{item.description}</p>
                      </li>
                    )
                  })}
                </ul>
    
                <div className={`slider-indicators slider-indicators-round z-30`}>
                  {content.map((item, index) => {
                    return (
                      // set first indicator to 'active'
                      <button key={`slider-indicator-${index}`} className={`${index === 0 ? 'active' : ''} ${dotsClass} slider-indicator`}>
                        <span className="sr-only">Slide {index}</span>
                      </button>
                    )
                  })}
                </div>
              </div>
            </div>
            <CallToAction show={cta.show_cta} data={cta} />
          </Container>
        </section>
      )
    }```
    
    opened by richyrb00 3
  • If

    If "Mouse draggable" is set, swiping on mobile does not work

    Currently if "Mouse draggable" is set, it is not possible on mobile phones to drag the slider. I think is a problem and UX could be improved

    Describe the solution you'd like For a better/expected UX it should still be possible to swipe on smartphones even if the setting "Mouse draggable" is set.

    Thank you!

    bug 
    opened by Grienauer 3
  • Stop Autoplay on click

    Stop Autoplay on click

    Introduces/changes the following functionalities:

    1. Autoplay stops when the user interacts (clicks/taps prev or next buttons or slider indicators) For the case that the design features a pause button shown onhover (to indicate the "pause on hover" functionality), the class "slider-nav-autopause" is removed
    2. Easier way to set the delay with which the indicators react
    opened by perdittmann 2
  • Download button on https://swiffyslider.com/ does not work

    Download button on https://swiffyslider.com/ does not work

    When I click on the top right download button on https://swiffyslider.com/ , I get redirected here: https://github.com/dynamicweb/swiffy-slider/releases/download/v1.6.0/swiffy-slider-1.6.0-dist.zip There, I am told "Not Found".

    This link works: https://github.com/dynamicweb/swiffy-slider/archive/refs/tags/v1.6.0.zip

    opened by perdittmann 0
  • Remove html template tag from children

    Remove html template tag from children

    The problem solved with this PR is about the tag "template" who is parsed as an slide or an indicator when the library init the slider.

    See issue https://github.com/dynamicweb/swiffy-slider/issues/46

    opened by Teods 4
  • Remove

    Remove "template" tag from children of .slider-container and .slider-indicators making library compatible with AlpineJS

    Is your feature request related to a problem? Please describe. I want the library to be compatible with AlpineJs and the Web HTML Element "template". AlpineJS use the "template" element for every actions, loop etc... and SwiffySlider take alld child element to display indicators and slide. See AlpineJS Templating usage : https://alpinejs.dev/essentials/templating#looping-elements

    Describe the solution you'd like I already implemented the solution (PR in preparation) it simply consist in excluding the "template" from the children and let all other tags as is

    PR https://github.com/dynamicweb/swiffy-slider/pull/47

    opened by Teods 0
  • Bare bones version?

    Bare bones version?

    Is there the possibility to make a "bare bones" version of Swiffy Slider? Or does that not fit into the concept?

    I have replaced a couple of old sliders on clients' websites with Swiffy Slider, and for the new slider to fit into the whole design, I had to override quite a bit of the CSS.

    I do love the possibility to style the slider just by adding classes, and I am not overly bothered by loading CSS I don't end up using. But it would be great to have a .pure class (or something) that does not style the elements, so I only have to add, not to override.

    As I have said before – your slider is a dream come true when I had already given up on looking for something usable and also on trying to write my own. Many, many thanks for this great piece of software – and no less for the stellar support!

    enhancement 
    opened by perdittmann 7
  • Safari issue with slider buttons on full screen

    Safari issue with slider buttons on full screen

    Describe the bug Slider buttons not working on Safari iOS, iPadOS, MacOS,... on fullscreen module.

    To Reproduce Steps to reproduce the behavior:

    1. Go to https://swiffyslider.com/examples/
    2. Click on the image to open the fullscreen module.
    3. Try to click the buttons to go to the next or previous.
    4. No response

    **Desktop **

    • OS: MacOS 12.3.1
    • Browser Safari
    • Version 15.4

    Smartphone

    • Device: Iphone 12 Pro
    • OS: iOS 15.4.1
    • Browser: Safari
    • Version: 15.4

    Additional information When disabling the CSSOM View Smooth Scrolling, the buttons work again. Safari>Develop>Experimental features>CSSOM View Smooth Scrolling.

    Tried adding the package for smooth scroll polypill, but that doesn't seem to help.

    bug documentation 
    opened by bramdupont 2
Releases(v1.6.0)
  • v1.6.0(Sep 28, 2022)

    Added

    • Added support for .slider-item-show2-sm to support showing 2 slides on mobile no matter how many slides are shown on desktop #52.

    Bugfixes

    • Fixed the handleIndicators method to not execute if the indicators have been dismounted [#50]
    • Fixed an issue in the extensions js handling dragging when first or last slide was dragged long distances [#48]

    Full Changelog: https://github.com/dynamicweb/swiffy-slider/compare/v1.5.3...v1.6.0

    Source code(tar.gz)
    Source code(zip)
  • v1.5.3(Apr 8, 2022)

    What's Changed

    • Bump v1.5.2 by @nicped in https://github.com/dynamicweb/swiffy-slider/pull/31
    • Fix exports section to allow imports in scss by @nicped in https://github.com/dynamicweb/swiffy-slider/pull/33

    Full Changelog: https://github.com/dynamicweb/swiffy-slider/compare/v1.5.2...v1.5.3

    Source code(tar.gz)
    Source code(zip)
  • v1.5.2(Mar 25, 2022)

    What's Changed

    • Add /css to exports for shorthand css + update doc by @nicped in https://github.com/dynamicweb/swiffy-slider/pull/30

    Full Changelog: https://github.com/dynamicweb/swiffy-slider/compare/v1.5.1...v1.5.2

    Source code(tar.gz)
    Source code(zip)
  • v1.5.1(Mar 21, 2022)

    What's Changed

    • Change exports to include src css by @nicped in https://github.com/dynamicweb/swiffy-slider/pull/25
    • Fix mobile round and square css and make mobile navigation a bit larger by @nicped in https://github.com/dynamicweb/swiffy-slider/pull/28

    Full Changelog: https://github.com/dynamicweb/swiffy-slider/compare/v1.5.0...v1.5.1

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Mar 16, 2022)

  • v1.4.1(Feb 23, 2022)

  • v1.4.0(Feb 2, 2022)

    Bugfixes

    • Bone

    Changed

    • CSS changed for nav arrows for better LTR support - specifically added left rules for .slider-nav
    • Changed loop of slides to also include go to end when on first slide [#16]
    • Update doc and configuration for noloop that it covers the new behavior above
    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(Jan 17, 2022)

  • v1.3.0(Jan 17, 2022)

    Bugfixes

    • Package does not contain source files breaking imports using PM's #9

    Changed

    • Changed javascript to use let instead of const according to bp.
    • Changed package to ESM type only and included source in package files
    • Changed CSS to use rem based media queries
    • Optimized CSS related to navigation buttons when placed outside the slider

    Added

    • Added support for .slider-nav-autohide to support hiding previous and next navigation arrows when first or last slide is visible #8

    What's Changed

    • remove active class instead of entire class attribute by @sasham43 in https://github.com/dynamicweb/swiffy-slider/pull/7

    New Contributors

    • @sasham43 made their first contribution in https://github.com/dynamicweb/swiffy-slider/pull/7

    Full Changelog: https://github.com/dynamicweb/swiffy-slider/compare/v1.2.0...v1.3.0

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Dec 3, 2021)

    [v1.2.0] - 03-12-2021

    Bugfixes

    • None

    Changed

    • Changed the use of zoom in css to transform: scale()
    • Changed javascript to use " instead ' consistently
    • Changed all event listeners to be passive to increase performance even further

    Added

    • Support for mouse drag option using the new swiffy-slider-extensions object
    • Added swiffy-slider-extensions for adding features not needed for core releases. Can be accessed on swiffyslider.extensions.*
    • Configure animation threshold for the intersection observer that sets .slide-visible when sliding. New attribute data-slider-nav-animation-threshold
    • swiffyslider.setVisibleSlides can now be called with a threshold overwriting the default 0.3

    What's Changed

    • Fix URL of README by @arrow2nd in https://github.com/dynamicweb/swiffy-slider/pull/2

    New Contributors

    • @arrow2nd made their first contribution in https://github.com/dynamicweb/swiffy-slider/pull/2

    Full Changelog: https://github.com/dynamicweb/swiffy-slider/compare/v1.1.0...v1.2.0

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Nov 16, 2021)

    [v1.1.0] - 16-11-2021

    Bugfixes

    • Configurator did not start autuplay when enabled
    • Navigation in docs fixed

    Added

    • Slide animation
    • Javascript can now set visible-slide class using intersection observer
    • Different animation styles in css

    Removed

    • BREAKING slider-item-shadow has been removed since it uses ::after which disables touch sliding on mobile devices

    Full Changelog: https://github.com/dynamicweb/swiffy-slider/compare/v1.0.2...v1.1.0

    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Nov 8, 2021)

  • v1.0.1(Nov 8, 2021)

    [v1.0.1] - 08-11-2021

    Welcome to the first release of Swiffy Slider.

    This project utilizes what is available in modern browsers resulting in a super lightweight and fast slider, greatly reducing the javascript footprint and increase performance to meet todays standards.

    Slide any content made in markup

    • Navigate with Touch, Keyboard, trackpad, pen and Mouse - because it is just browser scrolling
    • Setup is done in pure markup and css classes, no scripting required
    • No js loading of slides, configuration or initialization
    • Vanilla javascript, less than 1.3kb ~110 lines
    • Very low overall footprint ~4.5kb in total (css+js gzip'ed)

    Swiffy Slider benefits

    • Mobile first :iphone:, responsive, scaleable and content resilient sliding. Ensuring painless mobile experience.
    • Lighthouse 100 points :100: Using native browser features a unrivaled performance is ensured
    • SEO :pencil: is great as the slides and their content is in pure SLURP-readable markup
    • Build designed pages :art: any kind of markup can be slided giving perfect design freedom
    • Web Accessibility Guidelines (WCAG) :trophy: make your website as accessible as needed since this is just markup

    Thank you, give it a spin!

    Source code(tar.gz)
    Source code(zip)
    swiffy-slider-1.0.1-dist.zip(9.81 KB)
  • v1.0.0(Nov 8, 2021)

    Welcome to the first release of Swiffy Slider.

    This project utilizes what is available in modern browsers resulting in a super lightweight and fast slider, greatly reducing the javascript footprint and increase performance to meet todays standards.

    Slide any content made in markup

    • Navigate with Touch, Keyboard, trackpad, pen and Mouse - because it is just browser scrolling
    • Setup is done in pure markup and css classes, no scripting required
    • No js loading of slides, configuration or initialization
    • Vanilla javascript, less than 1.3kb ~110 lines
    • Very low overall footprint ~4.5kb in total (css+js gzip'ed)

    Swiffy Slider benefits

    • Mobile first :iphone:, responsive, scaleable and content resilient sliding. Ensuring painless mobile experience.
    • Lighthouse 100 points :100: Using native browser features a unrivaled performance is ensured
    • SEO :pencil: is great as the slides and their content is in pure SLURP-readable markup
    • Build designed pages :art: any kind of markup can be slided giving perfect design freedom
    • Web Accessibility Guidelines (WCAG) :trophy: make your website as accessible as needed since this is just markup

    Thank you, give it a spin!

    Source code(tar.gz)
    Source code(zip)
    swiffy-slider-1.0.0-dist.zip(9.81 KB)
Owner
Dynamicweb Software A/S
Dynamicweb Software A/S
Most modern mobile touch slider with hardware accelerated transitions

Get Started | Documentation | Demos Swiper Swiper - is the free and most modern mobile touch slider with hardware accelerated transitions and amazing

Vladimir Kharlampidi 33.7k Jan 9, 2023
noUiSlider is a lightweight JavaScript range slider library with full multi-touch support. It fits wonderfully in responsive designs and has no dependencies.

noUiSlider noUiSlider is a lightweight JavaScript range slider. No dependencies All modern browsers and IE > 9 are supported Fully responsive Multi-to

Léon Gersen 5.4k Dec 28, 2022
A lightweight carousel library with fluid motion and great swipe precision

Embla Carousel Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency

David 2.8k Jan 4, 2023
It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.

impress.js It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prez

impress.js 37.1k Jan 3, 2023
It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.

impress.js It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prez

impress.js 37.1k Jan 3, 2023
the last carousel you'll ever need

slick the last carousel you'll ever need Demo http://kenwheeler.github.io/slick CDN To start working with Slick right away, there's a couple of CDN ch

Ken Wheeler 27.8k Jan 4, 2023
Extended carousel based on Bootstrap 5 using only vanilla js.

Description Extended Slider based on Bootstrap 5 using only carousel component and vanilla js. Requirements: Bootstrap 5 Installation npm i -D extende

Carlos Pozo 7 Jul 26, 2022
:leaves: Touch, responsive, flickable carousels

Flickity Touch, responsive, flickable carousels See flickity.metafizzy.co for complete docs and demos. Install Download CSS: flickity.min.css minified

Metafizzy 7.2k Jan 4, 2023
A jQuery plugin for a slider with adaptive colored figcaption and navigation.

Adaptive Slider jQuery Plugin A jQuery plugin for a slider with adaptive colored figcaption and navigation. This plugin will take a list of figure ele

null 53 Jan 3, 2023
OlumSlider is a lightweight and flexible slider, written via vanilla js

olum-slider OlumSlider is a lightweight and flexible slider, written via vanilla js Documentation CDN <!DOCTYPE html> <html lang="en"> <head> <t

Olumjs 0 Oct 8, 2021
jQuery only range slider

Ion.RangeSlider. Is an easy, flexible and responsive range slider with tons of options. Version: 2.3.1 | Version 3.x is under development now Project

Denis Ineshin 2.5k Dec 25, 2022
A jquery UI range selection slider that supports dates

jQRangeSlider, jQDateRangeSlider & jQEditRangeSlider A javascript slider selector that supports dates and touch devices Home page Documentation Suppor

Guillaume Gautreau 676 Sep 24, 2022
🎚 HTML5 input range slider element polyfill

rangeslider.js Simple, small and fast jQuery polyfill for the HTML5 <input type="range"> slider element. Check out the examples. Touchscreen friendly

André Ruffert 2.2k Jan 8, 2023
An awesome, fully responsive jQuery slider plugin

FlexSlider 2.7.2 http://www.woocommerce.com/flexslider/ - Copyright (c) 2015 WooThemes Releases The master branch of this repository is always the lat

WooCommerce 4.9k Jan 3, 2023
:snowboarder: A responsive slider jQuery plugin with CSS animations

A responsive slider jQuery plugin with CSS animations Animations from animate.css Online demo Visit plugin website. Appszoom for developers also uses

Joan Claret 58 Dec 12, 2022
Vegas is a jQuery/Zepto plugin to add beautiful backgrounds and Slideshows to DOM elements.

Vegas – Backgrounds and Slideshows Vegas is a jQuery/Zepto plugin to add beautiful backgrounds and Slideshows to DOM elements. Important note: Vegas 2

Jay Salvat 1.8k Jan 7, 2023
The responsive CSS animation framework for creating unique sliders, presentations, banners, and other step-based applications.

Sequence.js The responsive CSS animation framework for creating unique sliders, presentations, banners, and other step-based applications. Sequence.js

Ian Lunn 3.4k Dec 20, 2022
Strut - An Impress.js and Bespoke.js Presentation Editor

All new development is happening in Strut2 Strut2 is currently private until we further solidify our "open source dividened program." Open Source Divd

Matthew Wonlaw 1.7k Dec 30, 2022
JavaScript image gallery for mobile and desktop, modular, framework independent

PhotoSwipe Repository JavaScript image gallery for mobile and desktop. Documentation and getting started guide. Demo and script home page. NPM npm ins

Dmitry Semenov 22.5k Dec 30, 2022