Skip to content
Diapositive is a dependency-free Javascript slideshow building library. It provides just what you need to quickly create awesome slideshows.
JavaScript HTML CSS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
dist
example
github
src
.babelrc
.eslintrc.js
.gitignore
Readme.md
package.json
rollup.config.js

Readme.md

main image

Diapositive is a dependency-free Javascript slideshow helper library. It does only one thing but does it well: toggling a class between slides in a deck.

Set up some markup, create a new Diapositive instance and you're ready to make incredible slideshows in seconds.

Philosophy

As my coding style evolves, I tend to prefer simpler, to the point libraries that make life as a developer a little easier without overcomplicating things. This is why after spending hours replicating code from project to project, I began compiling some functionalities into their own self contained modules. Hopefully, this is the beginning of a series of lightweight, easy and perfomant libraries to save me and everyone else time and effort across projects.

What does it do? Why should I use Diapositive instead of x or y?

The idea behind this library is to provide the minimum boilerplate code to quickly bootstrap interesting slideshow components.

It is only concerned with how things should work, not how they should look. By providing a tiny API surface, this library aims to simplify slideshow development to let you spend more time on styling or more valuable features.

Of course, you could use more advanced libraries to achieve the same thing. But why use a fully-fledged animation library when all you need is a simple toggling mechanism?

Why use a library at all? While the logic behind this one is rather simple, I found that replicating it multiple times a week gets cumbersome really quickly.

Example

You can find a simple usage example in the example folder of this repository. I encourage you to play with it to get a feel of what the library is doing.

Getting started

Download latest version with NPM...

npm install diapositive

(you can also link to the lib in html head with unpkg: <script src="https://unpkg.com/diapositive@latest/dist/diapositive.js"></script>)

...then create some markup...

<ul>
  <li>Julien</li>
  <li>André</li>
  <li>Marcel</li>
</ul>

<button id="prev">Previous</button>
<button id="next">Next</button>

...and finally initialize Diapositive.

import Diapositive from 'diapositive';

const diapo = new Diapositive('ul');

document.getElementById('prev').onclick = diapo.prev;
document.getElementById('next').onclick = diapo.next;

You're all set! Now Diapositive will take care of adding an active class to the correct element.

<ul>
  <li class="active">Julien</li>
  <li>André</li>
  <li>Marcel</li>
</ul>

...Next button clicked...

<ul>
  <li>Julien</li>
  <li class="active">André</li>
  <li>Marcel</li>
</ul>

API

Diapositive exposes these methods to navigate between slides:

Diapositive.next()

Go to next slide. If current slide is last slide, go to first slide.

Diapositive.prev()

Go to previous slide. If current slide is first slide, go to last slide.

Diapositive.goTo(index)

Go to slide at given 0 based index.

Diapositive.start()

Start Diapositive autoplay. Time is configurable via Diapositive.time option.

Diapositive.stop()

Stop Diapositive autoplay.

Events

Diapositive.on(event, callback)

Currently Diapositive only supports the change event. It triggers at the beginning of a slide change via prev, next, goTo or if the autoPlay option is set to true.

The current diapositive index is passed to the callback function.

diapositive.on('change', (index) => {
  console.log('Slide changed to:', index);
});

// Equivalent
diapositive.onchange = index => console.log('Slide changed to:', index);

Options

Diapositive takes an optional options object. If none is specified, reasonable defaults are used.

options = {
  // if the Diapositive instance should loop automatically
  autoPlay: false,
  // the className added to the active slide
  activeClassName: 'active',
  // the className added to the previous slide
  prevClassName: '',
  // the className added to the next slide
  nextClassName: '',
  // the className added to the active slide
  className: 'active', // DEPRECATED, use activeClassName instead
  // the first focused slide when a new Diapositive instance is created (0 indexed)
  startAt: 0,
  // delay between slides if autoplay is set to true
  time: 2000,
}

Styling

As intended, this library only provides minimal functionality. You are responsible for everything styling related.

The simplest example would be something like this:

ul li {
  display: none;
}

ul li.active {
  display: block;
}

To get more control, you should probably overlay all your slides with position absolute in a fixed height container. That way, you will be able to stage great css animations with minimal effort.

<ul class="diapo">
  <li class="diapo__slide">1 – My first slide</li>
  <li class="diapo__slide">2 – My second slide</li>
  <li class="diapo__slide">3 – My third slide</li>
  <li class="diapo__slide">4 – My fourth slide</li>
</ul>
import Diapositive from 'diapositive';

const diapo = new Diapositive('.diapo', {
  className: 'diapo__slide--active',
  autoPlay: true,
  time: 3000
});
.diapo {
  height: 100vh;
  width: 100vw;
  position: relative;
  margin: 0;
  padding: 0;
}

.diapo__slide {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: bold;
  font-size: 4rem;

  /* Animation */
  transition: 0.3s all;
  opacity: 0;
  transform: scale(0.8);
  pointer-events: none;
}

.diapo__slide--active {
  opacity: 1;
  transform: scale(1);
  pointer-events: auto;
}

Note the use of the pointer-events css property. As your slides will sit on top of each other, you need to make sure that the user can only interact with the current slide only.

You can’t perform that action at this time.