carrousel jquery

Par Grophies, il y a 8 ans


Bonjour,

j'ai créé un carrousel en jquery dont voici le code :
HTML :

<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes" /> <title>jQuery</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script defer src="https://use.fontawesome.com/releases/v5.0.10/js/all.js" integrity="sha384-slN8GvtUJGnv6ca26v8EzVaR9DC58QEwsIk9q1QXdCU8Yu8ck/tL/5szYlBbqmS+" crossorigin="anonymous"></script> <link rel="stylesheet" href="style.css" /> </head> <body> <main> <div class="container"> <ul> <li><button id="slider-previous" title="Image précédente"><i class="fa fa-backward"></i></button></li> <li><button id="slider-next" title="Image suivante"><i class="fa fa-forward"></i></button></li> </ul> <figure id="slider" class="slider"> <img src="images/1.jpg" alt="Photo du carrousel"> <figcaption>Street Art</figcaption> </figure> </div> </main> <script src="main.js"></script> </body> </html>

CSS :

* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: "Open Sans", sans-serif; overflow-y: scroll; text-align: center; } main { min-width: 320px; width: 96%; margin: 0 auto; } ul { display: none; } li { list-style: none; display: inline-flex; } .slider img { height: 300px; width: 700px; } img { max-width: 100%; } @media all and (min-width:992px) { main { width: 60%; max-width: 1350px; } }

JavaScript:

"use strict"; // Mode strict du JavaScript /*************************************************************************************************/ /* ****************************************** DONNEES ****************************************** */ /*************************************************************************************************/ var $slides = // La liste des slides du carrousel. [ { image: 'images/1.jpg', legend: 'Street Art' }, { image: 'images/2.jpg', legend: 'Fast Lane' }, { image: 'images/3.jpg', legend: 'Colorful Building' }, { image: 'images/4.jpg', legend: 'Skyscrapers' }, { image: 'images/5.jpg', legend: 'City by night' }, { image: 'images/6.jpg', legend: 'Tour Eiffel la nuit' } ]; var $state; // Objet contenant l'état du carrousel. /*************************************************************************************************/ /* ***************************************** FONCTIONS ***************************************** */ /*************************************************************************************************/ function onSliderGoToNext() { $state.index++; // Passage à la slide suivante. if($state.index === $slides.length) // Est-ce qu'on est arrivé à la fin de la liste des slides ? { $state.index = 0; // Oui, on revient au début (le carrousel est circulaire). } refreshSlider(); // Mise à jour de l'affichage. } function onSliderGoToPrevious() { $state.index--; // Passage à la slide précédente. if($state.index < 0) // Est-ce qu'on est revenu au début de la liste des slides ? { $state.index = $slides.length - 1; // Oui, on revient à la fin (le carrousel est circulaire). } refreshSlider(); // Mise à jour de l'affichage. } function onSliderToggle() { setInterval( function() { onSliderGoToNext(); }, 5000 ); } function refreshSlider() { // Recherche des balises de contenu du carrousel. // Changement de la source de l'image et du texte de la légende du carrousel. $("#slider img").attr("src", $slides[$state.index].image); $("#slider figcaption").text($slides[$state.index].legend); } /*************************************************************************************************/ /* ************************************** CODE PRINCIPAL *************************************** */ /*************************************************************************************************/ document.addEventListener("DOMContentLoaded", function() { // Pour éviter les conflits avec d'autres frameworks js qui utilisent également le symbole $. jQuery(document).ready(function($) { $("ul").css("display", "block"); $state = {}; // Initialisation du carrousel. $state.index = 0; // On commence à la première slide. refreshSlider(); // Affichage initial. $("#slider-next").on("click", function() { onSliderGoToNext(); }); $("#slider-previous").on("click", function() { onSliderGoToPrevious(); }); onSliderToggle(); }); });

J'ai appelé toutes les images en javascript plutôt qu'en html, cela évite d'utiliser position: absolute; ou float: left/right; qui fait sortir les images en dehors du flux. J'ai affiché uniquement la première image en html. Mais pour les améliorations suggérées à la fin du tp, je ne sais pas comment faire. J'ai essayé dans la fonction refreshSlider avec fadeIn, mais ça ne marche pas. Est-ce que vous avez une idée comment faire puisque je n'ai pas utilisé display: none; et display: block; ?

Merci.

Aucune réponse