carousel personnalisé
Dans ce tutorial, je vais vous montrer comment créer un carousel personnalisé en utilisant le code d'un exemple officiel (celui-ci) et lui en apportant quelques améliorations. Pour cela, on commence par créer un fichier vierge « index.html » et deux dossiers, « css » et « js ». Le premier dossier va contenir la feuille de style dans laquelle on va définir les propriétés CSS, et le deuxième va contenir tous nos fichiers JavaScript, à savoir le framework jQuery, le plugin jCarousel et un troisième fichier qui contiendra notre fonction principale. On va donc télécharger jQuery et jCarousel, respectivement ici et ici, on les renomme en « jquery.js » et « jcarousel.js » et on les place dans le dossier « js ». Dans ce même dossier, on va créer un troisième fichier JavaScript que l'on va appeler « mycarousel.js ». De la même façon, on crée un fichier vierge « style.css » que l'on place dans le dossier « css ». Et pour finir, on crée un dossier « images » dans lequel on va placer quatre images quelconques. Tout est prêt pour commencer à programmer !
Préparation du fichier JavaScript
On va maintenant s'intéresser au fichier « mycarousel.js » qui va contenir la fonction qui permet de créer le carousel. Il suffit d'aller directement le chercher dans notre exemple en faisant un Ctrl+U. On récupère la partie JavaScript, ce qui donne le code suivant.mycarousel.js
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function mycarousel_initCallback(carousel) { jQuery('.jcarousel-control a').bind('click', function() { carousel.scroll(jQuery.jcarousel.intval(jQuery(this).text())); return false; }); jQuery('.jcarousel-scroll select').bind('change', function() { carousel.options.scroll = jQuery.jcarousel.intval(this.options[this.selectedIndex].value); return false; }); jQuery('#mycarousel-next').bind('click', function() { carousel.next(); return false; }); jQuery('#mycarousel-prev').bind('click', function() { carousel.prev(); return false; });};jQuery(document).ready(function() { jQuery("#mycarousel").jcarousel({ scroll: 1, animation: 800, initCallback: mycarousel_initCallback, buttonNextHTML: null, buttonPrevHTML: null });}); |
- scroll : le nombre d'éléments par slide
- animation : la vitesse du scroll ("slow", "fast" ou un entier en millisecondes)
- initCallback : fonction qui est appelée juste après l'initialisation du carrousel
Préparation du fichier HTML
On commence par déclarer la feuille de style dans laquelle on va définir les propriétés CSS de notre carousel. On déclare également nos trois fichiers JavaScript : le framework jQuery, le plugin jCarousel et notre « mycarousel.js ».index.html
1 2 3 4 | <script type="text/javascript" src="js/jquery.js"></script><script type="text/javascript" src="js/jcarousel.js"></script><script type="text/javascript" src="js/mycarousel.js"></script><link rel="stylesheet" type="text/css" href="css/style.css"> |
Puis on ajoute le code HTML qui définit le carousel, ainsi que les liens qui vont nous permettre de contrôler le carousel via une numérotation.
index.html
01 02 03 04 05 06 07 08 09 10 11 12 13 14 | <div id="mycarousel" class="jcarousel-skin-tango"> <div class="jcarousel-control"> <a href="#">1</a> <a href="#">2</a> <a href="#">3</a> <a href="#">4</a> </div> <ul> <li><img src="images/slide1.jpg" border="0" alt=""></li> <li><img src="images/slide2.jpg" border="0" alt=""></li> <li><img src="images/slide3.jpg" border="0" alt=""></li> <li><img src="images/slide4.jpg" border="0" alt=""></li> </ul></div> |
Préparation du fichier CSS
style.css
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | .jcarousel-skin-tango .jcarousel-container { border: 1px solid #a7a09b; padding: 4px; background: #e5e1dc; margin-left: 10px; margin-top: 10px;}.jcarousel-skin-tango .jcarousel-container-horizontal { width: 450px;}.jcarousel-skin-tango .jcarousel-item { width: 450px; height: 300px;}.jcarousel-control { position: absolute; top:15px; left:12px; margin-bottom: 10px; text-align: center; z-index:1;}.jcarousel-control a, .jcarousel-control a:link, .jcarousel-control a:visited { font-size: 75%; text-decoration: none; padding: 3px 6px; border: 1px solid #fff; color: #eee; background-color: #7696e6; font-weight: bold;}.jcarousel-control a:focus,.jcarousel-control a:active, .jcarousel-control a:hover { outline: none; background:#a4c5fa; color: #4f70ab;} |

Ceci est tout-à-fait normal car jCarousel n'utilise pas de JavaScript pour gérer cette surbrillance, mais uniquement des propriétés CSS (active et focus). On va donc améliorer la fonction JavaScript dans le fichier « mycarousel.js » pour qu'il gère correctement la surbrillance.
Amélioration du fichier JavaScript
mycarousel.js
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | // on déclare deux variables à falsevar current_lien = false;var current_id = false;function mycarousel_initCallback(carousel) { jQuery('.jcarousel-control a').bind('click', function() { carousel.scroll(jQuery.jcarousel.intval(jQuery(this).text())); // jQuery(this) renvoie l'élément .jcarousel-control a, c'est-à-dire un lien // on ajoute la classe CSS jcarousel-test à notre lien .jcarousel-control a jQuery(this).addClass('jcarousel-test'); // on vérifie si current-id existe (car il est déclaré à false avant le premier clic) // et si current_id est différent du numéro cliqué actuel if (current_id && current_id != jQuery.jcarousel.intval(jQuery(this).text())) current_lien.removeClass('jcarousel-test'); // alors on supprime la classe CSS jcarousel-test à l'élément current_lien // current_lien prend la valeur du lien actuel current_lien = jQuery(this); // current_id prend la valeur du numéro actuel current_id = jQuery.jcarousel.intval(jQuery(this).text()); return false; }); jQuery('.jcarousel-scroll select').bind('change', function() { carousel.options.scroll = jQuery.jcarousel.intval(this.options[this.selectedIndex].value); alert(this.options[this.selectedIndex].value); return false; }); jQuery('#mycarousel-next').bind('click', function() { carousel.next(); return false; }); jQuery('#mycarousel-prev').bind('click', function() { carousel.prev(); return false; });};jQuery(document).ready(function() { jQuery("#mycarousel").jcarousel({ scroll: 1, animation: 800, initCallback: mycarousel_initCallback, buttonNextHTML: null, buttonPrevHTML: null }); // simule que l'id #premier est cliquée $("#premier").click();}); |
Conséquence sur les fichiers HTML et CSS
N'oublions pas de modifier les fichiers « index.html » et « style.css ». On place un id sur notre premier lien pour simuler que le premier élément soit cliqué. Ainsi lorsqu'on lancera le carousel, le numéro 1 sera en surbrillance.
index.html
index.html
1 2 3 4 5 6 | <div class="jcarousel-control"> <a id="premier" href="#">1</a> <a href="#">2</a> <a href="#">3</a> <a href="#">4</a></div> |
On édite la feuille de style pour commenter la classe CSS où on applique les pseudo-class focus, active et hover. On la remplace par une nouvelle classe jcarousel-test avec les mêmes propriétés. Attention, il faut bien déclarer cette classe sur la balise a comme nous l'avons fait dans notre script.
style.css
01 02 03 04 05 06 07 08 09 10 11 | /*.jcarousel-control a:focus,.jcarousel-control a:active, .jcarousel-control a:hover { outline: none; background:#DED9D3; color: #696969;}*/a.jcarousel-test:focus, a.jcarousel-test:active, a.jcarousel-test:hover, a.jcarousel-test:link, a.jcarousel-test:visited { outline: none; background:#DED9D3; color: #696969;} |
Voilà. C'est terminé pour de vrai cette fois. Et le rendu est plutôt sympathique.



Aucun commentaire:
Enregistrer un commentaire