Un mini-slider/diaporama

Je ne sais pas vous mais moi, quand on me demande de faire une galerie de photos ou d'images simple, ça m'ennuie de charger un plugin de carousel complet, complexe et lourd.
Alors, j'ai fait mon propre constructeur vanilla ultra-light (~9Ko minifié, 18Ko non-minifié).

Ultra-light en poids = un peu moins de fonctionnalités !

Ce mini-slider n'a pas pour vocation de remplacer les Flickity, Slick ou autre Tiny-slider (qui a ma préférence en ce moment) mais juste de faire des diaporamas simples et légers.

Disponible sur Github

Fonctionnalités disponibles

Installation

Charger la CSS de base dans le header.
Télécharger _mini-slider.scss

Charger le constructeur javascript avant fermeture du body.
Télécharger mini-slider.js

Déclarer les mini-sliders au onDomLoad par exemple ou après un chargement AJAX :

var miniSlider = document.querySelectorAll('.mini-slider');
if(miniSlider){
  for(var i=0; i<miniSlider.length; i++){
    miniSlider[i].miniSlider = new MiniSlider(miniSlider[i]);
  }
}

En déclarant les mini-sliders de la sorte, on peut à tout moment récupérer l'objet MiniSlider avec la syntaxe suivante (pour appeler les fonctions publiques par ex - voir plus bas) :

document.querySelector(ELT).miniSlider.nextSlide();

Structure HTML requise

<div class="mini-slider">
  <div class="slider">
    <ul class="slider-carousel">
      <li class="slide">
        Ce qu'on veut comme contenu !
        Mais des <img class="full" prendront tout l'espace disponible en largeur
        et centrés en hauteur.
        Après tout, ce plugin est destiné aux diaporamas !
        Les <li> sont en position:relative.
        Un <div class="content"> aura par défaut une position absolute 
        (width et height: 100%; top et left: 0).
      </li> 
      etc.
    </ul>
  </div>
</div>

data-attributes

Structure HTML finale

Le plugin rajoute des éléments au DOM :
boutons prev, next, navigation, ID unique, data-index à chaque slide, largeur du .slider, classe .active au slider, aria attributes :

<div class="mini-slider">
  <div class="slider active">
    <ul class="slider-carousel" id="slider-l7yiz2r21kc8zuju4" style="width: 900%;">
      <li class="slide" data-index="0">
        <img src="img/rock-loeb_01.jpg" alt="" class="full">
      </li>
      <li class="slide" data-index="1">
        <img src="img/rock-loeb_02.jpg" alt="" class="full">
      </li>
      etc.
    </ul>
  </div>
  <div class="nav" aria-label="Carousel navigation">
    <button class="nav-item" data-index="0" aria-controls="slider-l7yiz2r21kc8zuju4" aria-label="Carousel page 1"></button>
  etc.
  </div>
  <button class="arrow prev" aria-controls="slider-l7yiz2r21kc8zuju4"></button>
  <button class="arrow next" aria-controls="slider-l7yiz2r21kc8zuju4"></button>
</div>

Pour la version Fade, on clone chaque slide en plus et on rajoute la classe .fade au .slider-carousel :

<div class="mini-slider">
  <div class="slider active">
    <ul class="slider-carousel fade" id="slider-l800i7x92e9wnkf7i" style="width: 700%;">
      <li class="slide" data-index="0" style="visibility: hidden;">
        <img src="img/rock-loeb_02.jpg" alt="" class="full">
      </li>
      etc.
      <li class="slide slide-fade" data-index="0" style="width: 14.2857%;">
        <img src="img/rock-loeb_02.jpg" alt="" class="full">
      </li>
      etc.
    </ul>
  </div>
</div>

Les slide originaux sont conservés et uniquement masqués avec un visibility:hidden pour que .slider-carousel conserve la bonne hauteur puisque les .slide-fade sont en position absolute.

CSS

Les styles de base sont contenus dans le fichier /src/scss/components/_mini-slider.scss

Chaque éléments peut bien sûr être modifié dans vos fichiers CSS, en voici la liste :

Fonctions publiques

Passer à la slide suivante :

document.querySelector(ELT).miniSlider.nextSlide();

Revenir à la slide précédente :

document.querySelector(ELT).miniSlider.prevSlide();

Aller à la slide N :

document.querySelector(ELT).miniSlider.gotoSlide(N-1);

Destroy le plugin :

document.querySelector(ELT).miniSlider.destroy();

Restaurer le plugin après un destroy :

document.querySelector(ELT).miniSlider.restore();

Exemple

Transition par défaut, navigation-bullet, autoplay et pad activés.

Fonctions Publiques en action

Prev
Next
Go to slide 3
Destroy
Restore

Exemple transition Fade

Transition Fade, autoplay.

Fonctions Publiques en action

Prev
Next
Go to slide 3
Destroy
Restore

Voilà, c'est tout.