Sliderjis vous permet de faire défiler vos photos de plusieurs façons. Vous pourrez choisir le nombre d'images visibles ainsi que le nombre d'images qui défilent mais pas seulement. SliderJis vous donne la possibilité de faire défiler vos images horizontalement ou verticalement et vous permet aussi de faire défiler des images qui utilisent toute la largeur de l'écran. De plus, dans tous les cas de figure, vous pourrez rajouter du texte à vos images mais aussi un système de pagination customizable.
Ce slider est développé sur la base d'un tutoriel de Grafikart. Pour toute question, remarque, rapport de bug, n'hésitez pas à me laisser un message : jis@jisdev.com
Comment ça marche ?
SliderJis fonctionne avec un fichier Js (sliderjis.js) et un code HTML particulier.
Il faut d'abord inclure ce fichier js dans la balise <head> de votre page web.
<script src="/votre_chemin/sliderjis.js" async></script>
Côté HTML, on aura besoin d'une div avec un Id particulier qui représentera votre slider.
<div id="mon_slider"></div>
Ensuite, il faudra définir chaque slide (élément du slider). Selon le résultat que l'on souhaite, cette définition pourra changer (voir les exemples ci-dessous)
Par exemple: <div class="slide"> <img src="img/sport1.jpg" alt="Vive le crocket"> <div class="wrapper" data-preset="preset1_TL_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)"></div> <div class="title" >Mon titre 1</div> <div class="description" data-settings='{"fontFamily":"fantasy"}'>Ici une description pour tester le carousel</div> </div>
Enfin, il faudra, en utilisant la fonction onReady(), créer une nouvelle instance de la classe SliderJis en définissant toutes les options dont on a besoin pour ce slider.
let onReady = function () { new SliderJis(document.querySelector('#mon_slider'), { itemsToScroll: 2, itemsVisible: 3, infinite: true, }) } if (document.readyState !== 'loading') { onReady() } document.addEventListener('DOMContentLoaded', onReady)
Quelques exemples...
Slider simple
Ici un slider simple avec navigation (boutons fléchés) qui affiche les slides 3 par 3, les fait défiler 2 par 2. Les boutons fléchés s'affichent dès lors qu'il y a des slides à faire défiler.
<div id="slider1"> <div class="slide"> <img src="img/Sliderjis/img/sport1.jpg" alt="Vive le crocket"> </div> <div class="slide"> <img src="img/Sliderjis/img/telephone_maison.jpg" alt="Le body c'est super"> </div> [...] <div class="slide"> <img src="img/Sliderjis/img/sport2.jpg" alt="Le body c'est super"> </div> </div>
let onReady = function () { new SliderJis(document.querySelector('#slider1'), { itemsToScroll: 2, itemsVisible: 3, }) }
Slider en boucle avec pagination
Ici un slider avec navigation et une pagination (puces carrées avec numéro) qui affiche les slides 2 par 2, les fait défiler 2 par 2 et boucle quand on arrive en bout de slide.
<div id="slider2"> <div class="slide"> <img src="img/Sliderjis/img/sport1.jpg" alt="Vive le crocket"> </div> <div class="slide"> <img src="img/Sliderjis/img/telephone_maison.jpg" alt="Le body c'est super"> </div> [...] <div class="slide"> <img src="img/Sliderjis/img/sport2.jpg" alt="Le body c'est super"> </div> </div>
let onReady = function () { new SliderJis(document.querySelector('#slider2'), { itemsToScroll: 2, itemsVisible: 2, loop: true, pagination: true }) }
Slider infini avec texte classique
Ici un slider avec navigation et pagination simple (puces rondes sans numéro) qui affiche les slides 3 par 3, les fait défiler 3 par 3 à l'infini.
<div id="slider3"> <div class="slide"> <img src="img/Sliderjis/img/sport1.jpg" alt="Vive le crocket"> <div class="wrapper"></div> <div class="title">Mon titre 1</div> <div class="description">Une petite description</div> </div> <div class="slide"> <img src="img/Sliderjis/img/telephone_maison.jpg" alt="Le body c'est super"> <div class="wrapper"></div> <div class="title">Mon titre 2</div> <div class="description">Mais une description un peu plus longue est aussi possible</div> </div> [...] <div class="slide"> <img src="img/Sliderjis/img/sport5.jpg" alt="Vive le crocket"> <div class="wrapper"></div> <div class="title">Mon titre 9</div> <div class="description">Une petite description</div> </div> </div>
let onReady = function () { new SliderJis(document.querySelector('#slider3'), { itemsToScroll: 3, itemsVisible: 3, infinite: true, pagination: true, paginationConfig: { shape: 'square', number: true }, infos: { displayTxt: true, txtStyle: 'classic' } }) }
Slider JisCard
Ici un slider jisCard, c'est à dire que chaque slide est présenté sous forme de carte avec un titre, un texte et un lien cliquable. Ce slider affiche les slides 4 par 4 et les fait défiler 1 par 1 en boucle. Le texte du lien est paramétrable via les options.
<div id="slider4"> <div class="slide"> <img src="img/Sliderjis/img/sport1.jpg" alt="Vive le crocket"> <div class="wrapper"></div> <div class="title">Mon titre 1</div> <div class="description">Lorem ipsum, dolor sit amet consectetur adipisicing, elit. Enim, culpa, officiis. Praesentium at, eos, quis sequi aperiam nostrum ipsam, minus placeat corrupti deleniti fugit eaque nam mollitia architecto, impedit soluta.</div> <div class="link">http://www.lelienversunepage.com</div> </div> <div class="slide"> <img src="img/Sliderjis/img/telephone_maison.jpg" alt="Le body c'est super"> <div class="wrapper"></div> <div class="title">Mon titre 2</div> <div class="description">Sint minim ex elit amet adipisicing irure do sunt reprehenderit tempor fugiat ullamco minim aute dolore veniam.</div> <div class="link">http://www.lelienversunepage.com</div> </div> [...] <div class="slide"> <img src="img/Sliderjis/img/sport2.jpg" alt="Le body c'est super"> <div class="wrapper"></div> <div class="title">Mon titre 10</div> <div class="description">Sint minim ex elit amet adipisicing irure do sunt reprehenderit tempor fugiat ullamco minim aute dolore veniam.</div> <div class="link">http://www.lelienversunepage.com</div> </div> </div>
let onReady = function () { new SliderJis(document.querySelector('#slider4'), { itemsToScroll: 1, itemsVisible: 4, loop: true, pagination: true, jisCard: true, sliderFont: "Roboto Light", linkText: 'click it', paginationConfig: { shape: 'square', number: true }, infos: { displayTxt: true, txtStyle: 'custom' }, }) }
Slider largeur totale en boucle
Ici un slider qui utilise la largeur totale de la page grâce à l'option fullWidth. La pagination s'affiche sous forme de segments numérotés.
<div id="slider5"> <div class="slide"> <img src="img/Sliderjis/img/1069-1920x750.jpg" alt="du_texte"> </div> <div class="slide"> <img src="img/Sliderjis/img/165-1920x750.jpg" alt="du_texte"> </div> [...] <div class="slide"> <img src="img/Sliderjis/img/1069-1920x750.jpg" alt="du_texte"> </div>> </div>
let onReady = function () { new SliderJis(document.querySelector('#slider5'), { fullWidth: true, autoplay: false, loop: true, pagination: true, paginationConfig: { shape: 'segment', number: true, color: 'white' } }) }
Slider largeur totale infini avec timer et texte custom
Ici un autre slider fullWidth mais avec un texte custom. Pour faciliter la customisation du texte, vous pouvez utiliser 2 paramétrages (preset1 et preset2) qui facilitent le positionnement du texte et les couleurs à appliquer au titre et à la description ainsi que leur fond. Toutefois, vous pouvez aussi customiser complètement le texte en passant toutes les propriétés css voulues à l'attribut data-settings du titre comme de la description. (voir chapitre "customisation du texte")
<div id="slider6"> <div class="slide"> <img src="img/Sliderjis/img/165-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-preset="preset2_TC_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)_gold_black"></div> <div class="title">Mon titre 1</div> <div class="description">une petite description</div> </div> <div class="slide"> <img src="img/Sliderjis/img/675-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-preset="preset1_TR_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)"></div> <div class="title">Mon titre 2</div> <div class="description">une petite description</div> </div> <div class="slide"> <img src="img/Sliderjis/img/980-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-preset="preset2_ML_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)_gold_black"></div> <div class="title" data-settings='{"fontFamily":"fantasy", "fontWeight":"100"}'>Mon titre 3</div> <div class="description" data-settings='{"fontSize": "calc(0.3em + 1vw)","fontFamily":"cursive"}'>une petite description à rallonge et pour laquelle on doit baisser la taille de la police</div> </div> <div class="slide"> <img src="img/Sliderjis/img/1069-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-preset="preset1_MC_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)"></div> <div class="title">Mon titre 4</div> <div class="description">une petite description</div> </div> <div class="slide"> <img src="img/Sliderjis/img/1069-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-settings = '{"position":"absolute","top":"42%","right":"5%","boxSizing": "border-box","padding": "calc(1em + 0vh) calc(1em + 4.5vw)"}'></div> <div class="title" data-settings='{"border": "1px solid gold", "font-family":"fantasy", "fontSize":"calc(3em + 3vw)","lineHeight":"calc(1em + 1vw)","borderRadius":"0.25em","paddingLeft":"1em","paddingRight":"1em","width":"max-content","margin-bottom":"0.2em","color":"gold","boxShadow":"0px 0px 20px 5px gold"}'>Mon titre 5</div> <div class="description" data-settings='{"backgroundColor":"white", "color":"black", "borderRadius":"0.25rem", "font-family":"cursive", "fontSize":"calc(0.5em + 1vw)","lineHeight": "calc(0.5em + 3vw)","width": "max-content","padding": "0 0.5em", "margin" : "0 auto"}'>une petite description en plusieurs lignes ?</div> </div> <div class="slide"> <img src="img/Sliderjis/img/165-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-preset="preset2_MR_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)_gold_black"></div> <div class="title">Mon titre 6</div> <div class="description">une petite description</div> </div> <div class="slide"> <img src="img/Sliderjis/img/675-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-preset="preset1_BL_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)"></div> <div class="title">Mon titre 7</div> <div class="description">une petite description</div> </div> <div class="slide"> <img src="img/Sliderjis/img/980-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-preset="preset2_BC_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)_gold_black"></div> <div class="title">Mon titre 8</div> <div class="description">une petite description</div> </div> <div class="slide"> <img src="img/Sliderjis/img/1069-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-preset="preset1_BR_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)"></div> <div class="title">Mon titre 9</div> <div class="description">une petite description</div> </div> </div>
let onReady = function () { new SliderJis(document.querySelector('#slider6'), { fullWidth: true, fullWidthMobilePositions: ['-249px -185px','-149px -177px','-549px -29px','-949px -100px','-249px -185px','-249px -185px','-249px -185px','-249px -185px','-549px -94px'], autoplayDelay: 3000, infinite: true, infos: { displayTxt: true, txtStyle: 'custom' } }) }
Slider vertical simple
Ici un slider vertical qui affiche et fait défiler les slides un par un et s'arrête en bout de slider
<div id="slider7"> <div class="slide"> <img src="img/Sliderjis/img/sport1.jpg" alt="Vive le crocket"> </div> <div class="slide"> <img src="img/Sliderjis/img/telephone_maison.jpg" alt="Le body c'est super"> </div> [...] <div class="slide"> <img src="img/Sliderjis/img/sport2.jpg" alt="Le body c'est super"> </div> </div>
let onReady = function () { new SliderJis(document.querySelector('#slider7'), { slideDirection: 1, slideWidth: 'auto', itemsToScroll: 1, itemsVisible: 1, infos: { displayTxt: false } }) }
Slider vertical en boucle avec texte classique et pagination
Ici un slider vertical qui affiche et fait défiler les slides 3 par 3 et boucle en bout de slider.
<div id="slider8"> <div class="slide"> <img src="img/Sliderjis/img/sport1.jpg" alt="Vive le crocket"> <div class="wrapper"></div> <div class="title">Mon titre 1</div> <div class="description">Ici une description pour tester le carousel</div> </div> <div class="slide"> <img src="img/Sliderjis/img/telephone_maison.jpg" alt="Le body c'est super"> <div class="wrapper"></div> <div class="title">Mon titre 2</div> <div class="description">Ici une description pour tester le carousel</div> </div> [...] <div class="slide"> <img src="img/Sliderjis/img/blue_canyon.jpg" alt="Technique olivier atom"> <div class="wrapper"></div> <div class="title">Mon titre 9</div> <div class="description">Ici une description pour tester le carousel</div> </div> </div>
let onReady = function () { new SliderJis(document.querySelector('#slider8'), { slideDirection: 1, slideWidth: '500', itemsToScroll: 3, itemsVisible: 3, loop: true, pagination: true, paginationConfig: { shape: 'square', number: false }, infos: { displayTxt: true, txtStyle: 'classic' } }) }
Slider vertical infini avec pagination customisée
Ici un slider vertical qui affiche 4 slides et fait défiler les slides un par un.
<div id="slider8"> <div class="slide"> <img src="img/Sliderjis/img/sport1.jpg" alt="Vive le crocket"> </div> <div class="slide"> <img src="img/Sliderjis/img/telephone_maison.jpg" alt="Le body c'est super"> </div> [...] <div class="slide"> <img src="img/Sliderjis/img/sport2.jpg" alt="Le body c'est super"> </div> </div>
let onReady = function () { new SliderJis(document.querySelector('#slider9'), { slideDirection: 1, itemsToScroll: 1, itemsVisible: 4, slideWidth: '300', infinite: true, pagination: true, paginationConfig: { shape: 'segment', number: true, color: 'yellow' } }) }
Liste des options
Nom de l'option | Valeur par défaut | Valeurs possibles | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
navigation | true | true / false | Permet d'afficher ou masquer les flèches de navigation | ||||||||||||
fullWidth | false | true / false | Permet d'afficher le slider en utilisant toute la largeur de l'écran | ||||||||||||
fullWidthGap | 0 | nombre de px | Quand l'option fullWidth est activée, l'option fullWidthGap permet de réduire la hauteur du slider lors de l'affichage sur mobile, de manière à laisser apparaitre un bandeau en haut de l'écran (pouvant contenir le titre du site ou un menu) tout en utilisant l'intégralité de la hauteur restante disponible pour afficher le slider | ||||||||||||
fullWidthMobilePositions | [ ] | [ ] | Un tableau contenant les décalages en x et y pour chaque image du slider de façon à pouvoir positionner chaque image comme on le souhaite lors d'un affichage sur mobile | ||||||||||||
autoplay | true | true / false | Cette option, active par défaut, permet à un slider fullWidth (et fullWidth uniquement) de défiler automatiquement. Il n'est donc nécessaire de l'indiquer que pour la désactiver. | ||||||||||||
autoplayDelay | 4000 | Nombre en millisecondes | Cette option permet d'indiquer le délai en milliseconde entre chaque défilement du slider fullWidth | ||||||||||||
jisCard | false | true / false | Cette option permet d'afficher les slides sous forme de carte. Un lien est rajouté sous la description. | ||||||||||||
linkText | "voir détail" | string | Le texte du lien quand l'option jisCard est activée. | ||||||||||||
slideDirection | 0 | 0 | 1 | Cette option permet d'indiquer le sens du slider. 0 pour un slider horizontal, 1 pour un slider vertical | ||||||||||||
slideWidth | auto | auto | valeur en px | Cette option permet d'indiquer la largeur occupée par un slider vertical. "auto" permet au slider d'occuper toute la largeur disponible de son conteneur. Une valeur en px détermine précisément la largeur du slider indépendamment de son conteneur. | ||||||||||||
pagination | false | true / false | Cette option permet d'afficher les puces de pagination | ||||||||||||
paginationConfig
|
|||||||||||||||
itemsToScroll | 1 | nombre | Cette option permet d'indiquer le nombre de slides à faire défiler. | ||||||||||||
itemsVisible | 1 | nombre | Cette option permet d'indiquer le nombre de slides visibles dans le slider. | ||||||||||||
loop | false | true / false | Cette option permet d'indiquer si le slider doit boucler aux bornes du slider. | ||||||||||||
infinite | false | true / false | Cette option permet d'indiquer si le slider continue à l'infini. | ||||||||||||
infos
|
|||||||||||||||
paginMinScale | 1 | nombre | Cette option permet de modifier la taille minimum des boutons de pagination. | ||||||||||||
paginMaxScale | 1.2 | nombre | Cette option permet de modifier la taille maximum des boutons de pagination. |
Customisation du texte
La customisation du texte peut se faire de 2 façons différentes : soit en utilisant des paramètres prédéfinis, soit en gérant la totalité des propriétés css vous même.
* Utilisation des paramètres prédéfinis (preset):
Pour utiliser un preset, il faut définir l'attribut data-preset de la div qui a la classe "wrapper". Cet attribut a 6 paramètres séparés par des "_":
Pour l'instant il n'existe que 2 presets: preset1 et preset2. preset1 permet de colorer les fonds du texte et de la description sur toute la largeur de l'écran. preset2 permet de colorer les fonds du texte et de la description en fonction de leur taille et non plus sur toute la largeur de l'écran.
Il y a 9 positions prédéfinies:
Toutes les couleurs peuvent être définies de toutes les façons valides en css.
Par exemple: <div class="wrapper" data-preset="preset2_ML_rgba(255,215,0,0.8)_rgba(0,0,0,0.8)_gold_black"></div>
* Utilisation des propriétés css:
En utilisant les propriétés css, vous pouvez aussi bien surcharger un preset en rajoutant des propriétés css aux div .title et .description que customiser totalement le texte en gérant toutes les propriétés css des 3 div .wrapper, .title et .description. Dans tous les cas, l'ajout de propriétés css se fait en utilisant l'attribut data-settings des div à customiser.
Par exemple: <div class="slide"> <img src="img/Sliderjis/img/1069-1920x750.jpg" alt="du_texte"> <div class="wrapper" data-settings = '{"position":"absolute","top":"42%","right":"5%","boxSizing": "border-box","padding": "calc(1em + 0vh) calc(1em + 4.5vw)"}'></div> <div class="title" data-settings='{"border": "1px solid gold", "fontFamily":"fantasy", "fontSize":"calc(3em + 3vw)","lineHeight":"calc(1em + 1vw)","borderRadius":"0.25em","paddingLeft":"1em","paddingRight":"1em","width":"max-content","margin-bottom":"0.2em","color":"gold","boxShadow":"0px 0px 20px 5px gold"}'>Mon titre 5</div> <div class="description" data-settings='{"backgroundColor":"white", "color":"black", "borderRadius":"0.25rem", "font-family":"cursive", "fontSize":"calc(0.5em + 1vw)","lineHeight": "calc(0.5em + 3vw)","width": "max-content","padding": "0 0.5em", "margin" : "0 auto"}'>une petite description</div> </div>