Slideshow jQuery accessible

Slideshow jQuery accessible

05 jun | Catégorie: Javascript | Rédigé par Snoupix | 14905 lectures

Dans ce tutoriel, vous allez apprendre comment réaliser un slideshow jQuery accessible pour votre site web. Étapes par étapes, vous découvrirez le processus de création en allant du HTML jusqu'au Javascript. Ceci est un tutoriel basé sur celui du site anglophone SixRevisions. Merci à eux de nous avoir autorisé à le reprendre pour le traduire et l'améliorer un peu.

 

 

 

La 2ème partie de ce tutoriel (et exclusivement conçue par nous) portera sur la gestion dynamique de ce slideShow : Ajout/Suppression de slides , miniaturisation automatique des images, changer la position des slides (et tout ça en Ajax). Cette partie va en fait consister à étudier la partie statique de ce slideShow.

 

Les bases du concept

La partie la plus importante de tout bon composant web est d'avoir une structure HTML solide et bien construite. Avoir une base sémantique cohérente signifie que votre contenu pourra être accessible dans tous les navigateurs actuels.

La structure de notre contenu est matérialisé par une div qu'on appellera #slidehow et qui servira de conteneur principal pour notre slideshow. A l'intérieur de cette div, on a une autre div appellée #slideContainer qui contient les slides, chacun d'eux étant matérialisé par une div avec une classe .slide.

Etape 1: HTML


Dans l'exemple n°1 ci-dessous, vous verrez comment les navigateurs textuels et ceux incapables d'interpréter du CSS et du Javascript voient notre slideshow. Il est important de préciser que tout notre contenu est facilement accessible; rien n'est caché pour l'utilisateur, pour être sur que vraiment tout le monde puissent voir le contenu.

Vous remarquerez qu'il n'y a pas de code HTML pour les flèches de gauche et droite, car elles seront insérées dans le DOM après, grâce au Javascript. Le fait de les avoir intégrer au niveau du contenu aurait été confus pour les individus n'ayant pas la possibilité d'exécuter le CSS et le Javascript.


Exemple n°1: La structure HTML du contenu du slideshow.


Conseil: Testez l'accessibilité avant, et souvent. Lorsque vous travaillez sur quelque chose de nouveau, vous devez toujours tester votre structure HTML pour vérifier si elle est accessible. Vous pouvez par exemple utiliser WebAnywhere, une application web permettant de simuler l'utilisation d'un logiciel qui « lis » votre l'écran.

Etape 2: Styler le SlideShow

La prochaine étape pour obtenir un design efficace est d'avoir une panoplie de style qui tiennent compte de la possibilité que l'internaute ait le Javascript de désactivé.

Pour la div  #slideContainer, on met la propriété overflow en auto afin que la barre de défilement apparaisse lorsque le contenu dépasse la hauteur de 263px (c'est la hauteur des slides).


Il faut réduire la largeur des div avec la classe .slide de 20px pour faire apparaître la barre de défilement de droite lorsque le Javascript est désactivé.


Sans le Javascript, le contenu reste accessible; les utilisateurs peuvent faire défiler le contenu pour voir tous les slides.

Exemple n°2: Le slideshow sans le Javascript.

Vous pouvez également donner a la classe .slide un float:left; afin de rendre le défilement vertical au lieu d'un défilement horizontal.

Les flèches (CSS)

Pour éviter de ralentir l'exécution du Javascript, nous allons déclarer les styles pour les flèches de défilement qui seront insérées dans le DOM grâce au jQuery. Les flèches seront matérialisées par des , c'est pourquoi l'on déclare la propriété cursor avec la valeur pointer afin de changer le curseur de la souris lors du hover. La propriété text-indent permet de masquer le texte en le décalant en dehors de notre vue.


Etape 4: La meilleure partie... le Javascript

Maintenant que notre HTML et CSS sont en place, il est temps de passer aux choses plus amusantes. Nous utiliserons la libraire jQuery pour rendre notre slideshow plus interactif et animé (et surtout car le développeur est une personne qui n'aime pas trop se fatiguer).

La théorie

La première chose qu'il va falloir faire, c'est « désactiver » les styles CSS qui tiennent compte de la désactivation du Javascript. Cela implique de déclarer des styles CSS dans le Javascript pour la div #slideContainer afin de supprimer la barre de défilement. De plus, il va falloir redimensionner les div .slide de 560px, que nous avions réduit de 20px pour laisser la place à la barre de défilement. Il faut également mettre les divs en float left afin qu'elles soient afficher côté à côté horizontalement au lieu d'etre les unes sous les autres.

Enfin, avec la manipulation du DOM, on va insérer une div appellée #slideInner qui va englober tout nos slides et qui aura une largeur égale à la largeur totale de toutes les div ayant la classe .slide.

Finalement, on insère les flèches droite et gauche de navigation (avec une classe .control); on fera ça en Javascript afin que les utilisateurs n'ayant pas le Javascript d'activer ne puissent pas voir ces flèches.

Voici le code Javascript en entier, et après nous allons voir en détails à quoi correspondent chaque partie de code.


Créer des variables

Premièrement, on initialise au début du script des variables qui seront utilisées tout au long de ce script.

  • CurrentPosition sera un nombre qui contiendra la position actuelle du slideshow.
  • SlideWidth est la largeur de chaque div .slide, qui est fixée à 560px.
  • Slides : Il a été décidé de déclarer un objet « slides » qui correspond à la sélection $('.slide') en jQuery, afin que le code soit plus propre. Mais il est tout à fait possible d'utiliser ($('.slide'))  dans votre syntaxe.
  • numberOfSlides : Finalement, on détermine le nombre de slides dans notre slideshow en utilisant la méthode .length.

Supprimer la barre de défilement

Si notre script s'éxécute, alors notre utilisateur à bien le Javascript d'activer – on peut donc supprimer la barre de défilement en mettant la propriété overflow en 'hidden' ce qui écrasera le overflow:auto déclaré précédement dans notre CSS.


Insérer un div dans le DOM

Nous allons utiliser la propriété margin pour faire bouger nos slides de gauche à droite (nous verrons cela en détail après). Pour ce faire, nous avons besoin de créer une div qui va contenir toutes les divs .slides, avec une largeur égale au total de la largeur de nos slides. En ajustant la propriété margin de cette div, nous allons créer l'effet de mouvement horizontal. La méthode utilisée va être wrapAll


Il faut également donner une largeur à #slideInner, la nouvelle div que l'on a créée, en lui attribuant la largeur totale de toutes les divs .slide.


Styler les slides en Javascript

Avec le Javascript activé, nous voulons que les slides soient affichées horizontalement pour qu'elles soient côté à côté. Nous voulons également leur donner une largeur de 560px vu que il n'y aura pas de barre de défilement horizontale. Nous pouvons combiner la méthode jQuery .css avec .wrapAll() que nous utilisons dans le code précédent


Insérer les flèches de navigation dans le DOM

On va insérer ces flèches en manipulant le DOM; de cette façon, les utilisateurs qui utiliseront des navigateurs ne gérant pas le Javascript ainsi que les « lecteurs d'écran' » n'auront pas de structure HTML non valide avec des flèches de navigation qui les emmèneraient nul part, car cliquer sur celle-ci ne pourrait fonctionner sans le Javascript.

Nous allons faire ça en utilisant les méthodes .prepend() et .append() qui permettent d'insérer une balise HTML dans un objet sélectionné (dans notre cas, la div #slideshow est sélectionnée). Le texte à l'intérieur des balises span n'est pas important, car il a été caché en CSS.


Gérer les flèches de navigation droite et gauche avec une fonction

Gérer les flèches de navigation droite et gauche avec une fonction Pour gérer nos flèches, on va créer une fonction appellée manageControls qui va cacher et afficher les flèches en fonction de la position courant du slideshow. Si l'on se trouve sur le premier slide, on va cacher la flèche de gauche car il n'y a aucun slide précédent à afficher. De même lorsque l'on arrive à la fin, le slideshow va revenir automatiquement au début.
Nous faisons ça en utilisant les méthodes jQuery .hide() et .show() qui permettent de cacher/montrer les éléments du DOM sélectionnés.


Appeller manageControls() lorsque le DOM est prêt

Lorsque le premier script se charge, il nous faut appeler la fonction manageControls() une fois pour cacher la flèche de gauche. Il suffit simplement de passer en argument currentPosition dans lequel il y aura la valeur 0 intiale.


Tenir compte des événements de clic sur les flèches

L'étape finale dans le script du slideshow est de tenir compte des événements de clic sur les flèches de gauche et droite. Nous allons pour cela mettre en place des « écouteurs d'événements » qui permettent l'exécution d'une fonction lorsque l'utilisateur clique sur l'une des deux flèches.


Mettre à jour la valeur de currentPosition

Lorsque l'utilisateur clique sur une flèche, on met à jour la valeur de la variable currentPosition: si l'utilisateur clic sur la flèche de droite (qui a l'ID #rightControl) alors on incrémente de 1 notre currentPosition; si l'utilisateur clique sur la flèche de gauche (qui a l'ID #leftControl), alors on enlève 1 à notre variable currentPosition. Ce que l'on vient de faire s'appelle une opération ternaire, qui est un raccourci de l'utilisation des structures if/else.


Appeller manageControls() après la mise à jour de currentPosition

Après avoir ajusté la valeur de currentPosition, on appelle la fonction manageControls() à nouveau afin de cacher ou montrer les flèches en fonction de notre nouvelle position de slide.


Animer ses slides

Pour finir, on déplace #slideInner vers la gauche ou la droite en animant la valeur de la propriété CSS margin-left. La marge de gauche est la largeur négative de nos slides multiplié par la position courrante. Par exemple, si l'on se déplace au Slide n°3, alors notre marge de gauche est égale à -1120px.


Voilà, le tuto de SixRevisions, maintenant si vous restez sur votre faim vous pouvez le continuer avec les améliorations que nous avons apporté.

Les améliorations

Nous allons maintenant traiter de plusieurs cas de figure qui peuvent être intéressant à développer :

  • Retour automatique au premier slide lorsque l'on arrive sur le dernier et que l'on veut aller au suivant
  • Diaporama avec un bouton Lecture/Pause
  • Lancement automatique du diaporama
  • Afficher ou non les boutons Lecture/Pause

Par ailleurs, nous ferons en sorte que tous ces paramètres soient facilement modifiables au début du script.

Variables supplémentaires:


  • retour indique si le slide tourne en boucle ou pas.
  • tempsTransition correspond à la durée en millisecondes de la transition
  • affichePlayPauseindique si l'on doit afficher ou pas les boutons de lecture et de pause.
  • lectureAutomatique indique si le diaporama dés le chargement du DOM.
  • tempsAttente correspond au temps en millisecondes entre chaque slide en mode "diaporama".
  • icones est un tableau multi-dimensionnel comprenant le lien des icônes.
  • interval Correspond à la variable qui sera utilisée lors du diaporama
  • lectureEnCours est une variable qui nous dira dans quel "mode" de lecture on est (manuel ou automatique)

Le fait de déclarer ces variables permet entre autre de rendre le fichier Javascript beaucoup plus propre, mais surtout ca vous facilitera la tâche si un jour vous souhaitez basculer en mode manuel ou bien pour changer le temps de transition, ca évite de se noyer dans le code (même s'il n'est pas vraiment énorme dans ce cas précis).

La première chose que nous allons faire sera de définir 3 fonctions: "suivant,start et pause". Ceci nous permettra de gérer le changement de slides de manière automatique.


Les fonctions start et pause modifient la variable booléènne lectureEnCours. Pour permettre d'éxécuter une fonction toutes les x secondes, il est nécessaires de se reposer sur la fonction setInterval prenant en premiere paramètre le nom de la fonction, puis en second, le temps entre chaque éxécution. La fonction clearInterval permet quant à lui de stopper ce processus et prend en paramètre la variable qui a été attribuée au setInterval. Enfin la fonction suivant crée un évènement (qui ici est un clic) sur le bouton suivant.

Maintenant que les fonctions de base sont réalisées, nous allons lancé le diaporama, ainsi en dessous de ces 3 fonctions vous pouvez écrire:


Boutons Lecture/Pause

Si la variable affichePlayPause équivaut à true, nous allons rajouter au DOM, une image de controle supplémentaire:


Les fonctions vues là, ont déjà été utilisé précédemment, je ne reviendrais donc pas sur leur utilisation. Ici nous ajoutons juste une image au DOM puis nous lui attribuons un attribut src qui diffère selon l'état de la variable lectureEnCours. Enfin, nous lui ajoutons un écouteur sur l'évènement click. Aller et voici la CSS pour bien positionner cette icône


Gestion du retour automatique

Allez dernière ligne droite, tout d'abord il va falloir retoucher à la fonction manageControls, oui car si on autorise le retour automatique, cela a des répércussions sur l'affichage de la flèche de droite...


Voilà comment on repart à 0, on teste tout simplement si la position équivaut à celle du dernier slide, auquel cas on modifie la valeur de currentPosition à 0. Il ne reste maintenant plus qu'à ajouter 3 lignes de code dans la fonction qui est éxécutée lors du clic sur un des contrôles et ca donne ceci:


Voilà, et n'oubliez pas de changer le temps de transition dans la méthode animate de jQuery, c'est en fait le 2ème paramètre.

Résumé

Dans ce tutoriel, nous avons crée un script de slideshow simple en utilisant du bon code HTML, CSS et Javascript (jQuery). Nous avons tenu compte du principe d'accessibilité pour être sûr que notre slideshow fonctionne sans CSS et Javascript, ce qui rend notre script accessible dans la plupart des navigateurs.

La 2ème partie a permis d'ajouter quelques fonctionnalités intéressantes et de paramétrer ce petit script. A bientôt pour de nouveaux tutos, et n'oubliez pas qu'il y'aura une suite à ce tuto, sur la gestion en PHP/SQL/Ajax d'un slider dans une partie admin.

N'hésitez pas à laisser des commentaires pour vos remarques, astuces, conseils, améliorations, et soutien moral :)

Creative Commons License
Cette création par Snoupix.com est mise à disposition selon les termes de la licence Creative Commons.
Partager ce tutoriel :
wikio scoopeo fuzz diggfr digg-design blogmemes delicious tapemoi yoolink bluegger pioche

43 Commentaires

gravatar
le 05 juin à 13h48 Galdon Répondre Cet effet est super cool, à l'occasion faudra que je pense à l'utiliser.

La partie JS est quand même bien violente comparé au reste.
gravatar
le 11 juin à 13h03 Walkman Répondre Super ! Je cherchais justement un truc dans le genre, vraiment énorme ce site, merci à vous big_smile
gravatar
le 12 juin à 20h08 Walkman Répondre Ps: n'étant pas un pros en javascript, je me demandais si il etais possible de mettre des boutons du genre : 1 2 3 etc pour pouvoir allé directement au slide qui coréspond au chiffre sur le quelle on a cliqué ?
gravatar
le 13 juin à 12h55 François Répondre Salut, ouai, tout est toujours possible smile
En fait pour faire ce que tu veux il va falloir :
- Que tu places les boutons 1,2,3,4 en faisant une boucle en fonction du nombre de slide, puis en les ajoutant avec la méthode appen de jQuery.
- Ensuite que tu crées une fonction qui te change la variable de position en fonction de l'élément cliqué.
Tchao
J'essaiera aussi de l'améliorer en ajoutant une navigation avec les flêches.
gravatar
le 28 juin à 13h43 leknoppix Répondre Super interressant
gravatar
le 30 juin à 19h47 graffiti Répondre Yo
j'ai le chic pour trouver les bugs
dans ton admin, si tu supprime tous les slides, tu ne peux pas en recréer un ensuite !

bref, en fait j'ai une question, est il possible d'attribuer plusieurs éléments cliquables à une meme fonction ...exemple >>
$("#div1" + "#div2").click(function ()
{
action...
}
gravatar
le 30 juin à 23h33 François Répondre Salut, ouai pour le bug quelqu'un d'autre me l'a fait remarqué, je modifierais ca,
Pour ta question c'est largement faisable, il suffit comme en CSS de séparer tes éléments par une virgule, enfin ca devrait...Après je te dis ca mais j'ai jamais testé ^^
Sinon la doc de jQuery est assez bien fournie pour tout ce qui est sélection d'éléments...
gravatar
le 01 juillet à 10h13 graffiti Répondre yes j'avais la flemme de chercher mais j'ai trouvé ^^

ne fonctionne pas => $("#div1" , "#div2").click(function ()
fonctionne => $("#div1 , #div2").click(function ()
gravatar
le 02 juillet à 23h13 François Répondre Ouai j'aurais peut etre du préciser,
Au fait, si c'est ton porfolio que tu as mis en lien, laisse moi te féliciter pour tes créas!
gravatar
le 11 juillet à 23h54 Robin Répondre Tout d'abord bravo, ton srcipt est magnifique et merci de le rendre publique!

Je l'ai "emprunté" pour mon futur site : (une mise à jour de mon site en fait) ns10.freeheberg.com/~fluxrss//website/ (je met pas le http pour éviter le futur lien mort). Je l'ai adapté et rentré dans un tableau (car moi et les div on fait 10).

J'ai eu un petit problème d'Overflow, le hidden me cachait aussi une partie du background inséré dans mon tableau (du coup je l'ai décalé dans un div) sinon le tout marche superbement bien!

Seul petit problème: 1 slide sur deux passe en trombe.

En ce moment j'essaie de faire les petits "ticks" avec les images sur le côté. Pour l'instant je travaille sans boucle mais après je rajouterai une boucle reprenant les trois ou quatre dernières slide créé dans mon pannel d'admin.

Si vous avez réussi n'hésitez pas, en tout cas je suis plutôt satisfait pour une première expérience jQuery.

P.S : je sais que le design n'est pas top mais que voulez vous, moi e le pinceau on est à des années lumières.
gravatar
le 13 juillet à 14h00 louis Répondre Salut, le meilleur slideshow vu pour l'instant!
Félicitation François, notamment pour l'explication de ton JS. Rare sont ceux qui explique aussi bien leur code.
Pour être incontestable, il ne manque plus que la fonction de "Walkman" (les boutons qui permettent d'aller directement au slide)
Le meilleur exemple est celui de Agile caroussel :
http://www.agilecarousel.com/examples/multi_example/carousel.html
Tes explications parleront sûrement à un dev...moins à un graphiste.
Tu pourrais aller un peu plus loin dans l'explication ?
Merci à toi
gravatar
le 13 juillet à 15h56 François Répondre Merci pour tes encouragements, il n'y a pas que mois sur ce tuto, il faut aussi remercier SixRevisions et le traducteur Stéphane smile

C'est vrai qu'une fonctionnalité de carroussel pourait être intéressante...

J'en ai déjà parlé un peu plus haut je crois,
Ce que je ferais c'est de générer dynamiquement mes liens en fonction du nombre de slide (donc en javascript). de style:
<a class="iconecarroussel" href="javascript:goTo(1)">&nbsp;</a>
<a class="iconecarroussel" href="javascript:goTo(2)">&nbsp;</a>
<a class="iconecarroussel" href="javascript:goTo(3)">&nbsp;</a>
....

En fonction de l'élément cliqué on change ensuite la variable currentPosition...et il faut procéder avec la meme logique pour changer la position du slide.
Après il peut être intéressant d'externaliser le bout de code qui anime le slideshow, histoire de ne pas répéter de code...
gravatar
le 13 juillet à 18h04 louis Répondre Merci de ta diligence.
Je ne suis pas très à l'aise avec le code mais j'ai fait ma propre bidouille. Un peu long mais ça marche:

HTML:
<div class="navSlide"><div class="btn01 imgG"></div><div class="btn02 imgG"></div><div class="btn03 imgG"></div></div>

CSS:
.navSlide {
background:transparent none no-repeat scroll 0 0;
height:32px;
padding-left:250px;
position:relative;
top:0px;
}
.navSlide .imgG{
display:block;
float:left;
width:7px;
padding:0 5px;
cursor:pointer;
background:transparent url(../img/rond.png) no-repeat 0 0;
height:11px;
}
.navSlide .imgH {
display:block;
padding:0 5px;
width:7px;
cursor:pointer;
background:transparent url(../img/rond.png) no-repeat 0 -11px;
height:11px;
}

JS:
$('.btn01').click(function () {
$('.navSlide').find('div').removeClass("imgH");
currentPosition = 0;
$('#slideInner').animate({
'marginLeft' : slideWidth*(-currentPosition)
});
$('#leftControl').hide();
$('#rightControl').show();
$(this).addClass("imgH");// classe CSS pour changer image active
});

PB: faut ajouter ce bout de JS autant de fois que de slide...
gravatar
le 13 juillet à 18h05 louis Répondre JS:
$('.btn02').click(function () {
$('.navSlide').find('div').removeClass("imgH");
currentPosition = 1;
$('#slideInner').animate({
'marginLeft' : slideWidth*(-currentPosition)
});
$('#leftControl').show();
$('#rightControl').show();
$(this).addClass("imgH");
});
$('.btn03').click(function () {
$('.navSlide').find('div').removeClass("imgH");
currentPosition = 2;
$('#slideInner').animate({
'marginLeft' : slideWidth*(-currentPosition)
});
$('#leftControl').show();
$(this).addClass("imgH");
});
gravatar
le 13 juillet à 18h16 François Répondre Pour éviter de copier le code autant de fois qu'il y'a de boutons tu peux essayer
ca :
$('.navSlide div').click(function () {


et apres répcupérer la position en vérifiant la position de l'élément cliqué...

Si ca peux t'aider...
gravatar
le 05 août à 21h35 Anonyme Répondre Je n'ai fais que parcourir le code mais ne faudrait-il pas désactiver automatiquement la lecture automatique lorsque l'utilisateur clique sur une flèche (c-a-d repasse en manuel) ?
gravatar
le 06 août à 00h28 François Répondre Oui ca doit être faisable en mettant à false la variable lectureAutomatique, mais en laissant à true la variable affichePlayPause...
gravatar
le 12 août à 17h36 Koala Répondre hello,
alors tout d'abord GRANDS BRAVO et MERCI pour la clareté de ces tutos (qui marchent !!! he oui, c'est important de le souligner je trouve...). Perso ils répondent à bien des questions que je me posais.
Concernant le slideshow, peut on aller chercher les images dans un dossier ?
Aussi peut on faire apparaitre qque part le numero de l'image dans la série : 3/25 par exemple ?
Et tant que j'y suis, est-il possible de le faire partir sur une photo déterminée ?
Merci d'avance et désolé de ces questions de débutant...
So long !
gravatar
le 23 août à 13h13 herzblut Répondre Hello super slideshow vraiment très bien fait bravo.

Je voulais savoir s'il était possible, et si oui comment faire, pour mettre la lecture automatique en autostart dés qu'on arrive sur la page ?
gravatar
le 23 août à 14h21 François Répondre Merci,Bah en fait c'est au début du fichier JS:

var lectureAutomatique = true;
gravatar
le 23 août à 17h20 koala Répondre et moi ? j'ai pas de reponse à mes petites questions ?... sniff !
gravatar
le 23 août à 18h09 François Répondre Désolé j'avais zappé ton message wink
Pour les images dans un dossier, en fait la suite de ce tuto (partie admin) devrait t'aider...
Etant donné qu'on connait la position ouai on peut l'afficher dans un <span id="numero"></span>
et a chaque fois qu'on actualise le truc on devrait pouvoir faire $('#numero').text(position+'/'+numberOfSlides);
Sinon pour ta dernière question, si tu changes la variable currentPosition au début ca devrait marcher...
TCHAO
gravatar
le 23 août à 19h10 koala Répondre merci beaucoup !
je vais essayer tout ça dès demain !!!
mais t'as vu, je surveillais attentivement !... allez, sans rancune !!! ;-)
gravatar
le 25 août à 16h25 flop25 Répondre Réponse à Anonyme:Je n'ai fais que parcourir le code mais ne faudrait-il pas désactiver automatiquement la lecture automatique lorsque l'utilisateur clique sur une flèche (c-a-d repasse en manuel) ?
Bonjour j'ai tenté de mettre en place cette fonctionnalité et voilà le résultat :

$(document).ready(function(){
//Configuration
var retour = true;
var tempsTransition = 1000;
var affichePlayPause = true;
var lectureAutomatique = true;
var tempsAttente = 4000;

var icones = new Array();
icones['play'] = 'include/template_common/Scripts/slideshow/img/play_slider.png';
icones['pause'] = 'include/template_common/Scripts/slideshow/img/pause_slider.png';

var currentPosition = 0;
var slideWidth = 340;
var slides = $('.slide');
var numberOfSlides = slides.length;
var interval;
var lectureEnCours = false;
// Supprime la scrollbar en JS
$('#slidesContainer').css('overflow', 'hidden');

// Attribue #slideInner à toutes les div .slide
slides
.wrapAll('<div id="slideInner"></div>')
// Float left to display horizontally, readjust .slides width
.css({
'float' : 'left',
'width' : slideWidth
});

// Longueur de #slideInner égale au total de la longueur de tous les slides
$('#slideInner').css('width', slideWidth * numberOfSlides);

// Insert controls in the DOM
$('#slideshow')
.prepend('<span class="control" id="leftControl">Précédent</span>')
.append('<span class="control" id="rightControl">Suivant</span>');



// Hide left arrow control on first load
manageControls(currentPosition);
//Crée un écouteur d'évènement de type clic sur les classes .control
$('.control').bind('click', function(){
if(lectureEnCours == true){
$('#navDiapo').attr('src',icones['play']);
pause();
}
// Determine la nouvelle position
currentPosition = ($(this).attr('id')=='rightControl') ? currentPosition+1 : currentPosition-1;

if(currentPosition == numberOfSlides && retour == false ){
currentPosition--;
pause();
}
// Cache ou montre les controles
manageControls(currentPosition);
// Fais bouger le slide
$('#slideInner').animate({
'marginLeft' : slideWidth*(-currentPosition)
},tempsTransition);
});

// manageControls: Cache ou montre les flêches de controle en fonction de la position courante
function manageControls(position){
// Cache la fleche "précédent" si on est sur le premier slide
if(position==0){ $('#leftControl').hide() } else{ $('#leftControl').show() }
// Cache la fleche "suivant" si on est sur le dernier slide (et que le retour automatique n'est pas activé)
if(position==numberOfSlides-1 && retour == false){
$('#rightControl').hide();
} else {
$('#rightControl').show();
}
if(position == numberOfSlides && retour == true){
currentPosition = 0;
$('#leftControl').hide();
}
}
function suivant(){
// Determine la nouvelle position
currentPosition = ($('#rightControl')) ? currentPosition+1 : currentPosition-1;

if(currentPosition == numberOfSlides && retour == false ){
currentPosition--;
pause();
}
// Cache ou montre les controles
manageControls(currentPosition);
// Fais bouger le slide
$('#slideInner').animate({
'marginLeft' : slideWidth*(-currentPosition)
},tempsTransition);
}
function start() {
lectureEnCours = true;
interval = setInterval(suivant, tempsAttente );
}
function pause() {
lectureEnCours = false;
clearInterval(interval);
}

//Si le diapo est activé
if(lectureAutomatique == true){
start();
}
if(affichePlayPause == true){
$('#slidesContainer').prepend('<img id="navDiapo" src="" alt="Navigation diaporama" />');
if(lectureAutomatique == true){
$('#navDiapo').attr('src',icones['pause']);
}else{
$('#navDiapo').attr('src',icones['play']);
}
$('#navDiapo').bind('click', function(){
if(lectureEnCours == true){
$(this).attr('src',icones['play']);
pause();
}else{
$(this).attr('src',icones['pause']);
start();
}
});
}



});
gravatar
le 11 septembre à 18h44 hugo Répondre Comment l'insérer dans une page en html ?
gravatar
le 13 septembre à 15h25 flop25 Répondre Réponse à hugo:Comment l'insérer dans une page en html ?
? pardon ?
gravatar
le 15 septembre à 15h39 Houssenka Répondre Tout d'abord je tenais à vous féliciter car je trouve ce tutoriel très bien écrit. Il est clair et vraiment bien commenté.

Réponse à flop25:Réponse à hugo:Comment l'insérer dans une page en html ?
? pardon ?

Ensuite j'ai parcouru très vite les commentaires mais concernant ce qu'il demande (je n'ai pas regardé en détail je l'avoue), il semblerait que tu aies implémenté la fonction carrousel qui est évoquée un peu plus haut et il souhaiterait savoir comment est effectué l'appel de la dite fonction dans une page html (depuis un bouton ou une image par exemple).
Cela m'intéresse également puisque cela me fera gagner du temps ^^
gravatar
le 17 septembre à 21h07 flop25 Répondre Je n'ai fait qu'implanter la désactivation de la lecture auto après avoir cliqué sur une flèche : je n'ai pas implémanter des boutons 1 2 3 ... appelant chacun un slide
cf mon site pour voir ( http://flop25.free.fr/site.php?font_size=normal&;screen_size=big&ok=Valider )
gravatar
le 20 septembre à 00h39 Houssenka Répondre Réponse à flop25:Je n'ai fait qu'implanter la désactivation de la lecture auto après avoir cliqué sur une flèche : je n'ai pas implémanter des boutons 1 2 3 ... appelant chacun un slide
cf mon site pour voir ( http://flop25.free.fr/site.php?font_size=normal&;;screen_size=big&ok=Valider )

ok merci pour ta réponse smile , j'aurais du regarder d'un peu plus près.
Quelqu'un aurait-il déjà implémenté la solution donnée par françois ("$('.navSlide div').click(function () {") ?
gravatar
le 01 octobre à 14h16 koala Répondre salut a tous,
je reviens vers vous pour savoir si comme moi qqun a deja rencontré des pbs avec le slideshow sur safari ?...
tout ce passe a merveille sur FF et IE mais sur safari, impossible de lancer le diaporama ni passer manuellement d"une image à l'autre bien que les boutons semblent réagir normalement (play/pause et apparition du bouton précédent au clic sur suivant)
ai-je merdé qquepart ?
merci de vos réponses !
gravatar
le 08 octobre à 03h25 koala Répondre allo, allo ?
gravatar
le 20 octobre à 13h36 Demilliac Répondre Bonjour et avant tout un grand merci pour ce tuto aux petits ognons !

Vous écrivez : "Vous pouvez également donner a la classe .slide un float:left; afin de rendre le défilement vertical au lieu d'un défilement horizontal."
Est-ce vraiment aussi simple que cela ? parce que pour avoir essayer ca ne change pas grand chose dans mon cas. Ou y a t il autre chose que ma logique simpliste ai loupé ?

merci d'avance.

Et pour répondre a koala > aucun probleme pour moi sous safari mac avec la version demo.
gravatar
le 04 novembre à 11h15 Mike Répondre Bonjour et bravo également pour ce tutoriel. Je vous remercie beaucoup pour vos commentaires dans le code qui m'ont aidé à comprendre de nombreuses choses smile
Enfin félicitations vraiment.

J'ai également lu les commentaires avec grand intérêt et la dernière chose qui m'intéresserait pour ma page serait d'ajouter un menu pour accéder directement à une slide... Malheureusement, voilà plusieurs jours que je travaille dessus sans aucun résultat sad. J'ai essayé le code donné par louis, essayé de faire plusieurs fonctions en suivant les différents conseils de françois et rien ne fonctionne, pas l'ombre d'un résultat à l'horizon.

Je ne sais pas si mon message sera lu mais je sollicite votre aide si vous avez un peu de temps à me consacrer.
Vous remerciant par avance de l'attention que vous porterez à mon message.
gravatar
le 05 décembre à 00h29 sof Répondre Bonsoir,
Avant tout un grand merci pour ce tutoriel, très complet et bien expliqué !
J'aimerais savoir si il est possible de réinitialiser le slide en javascript car je veux changer le contenu en cliquant sur un bouton...
Est ce faisable ?
et dans l"affirmative, comment ?
gravatar
le 31 décembre à 17h56 27beatbox Répondre Bonjour à tous
Super le slide
J'ai juste une question simple : je voudrais insérer sur une même page 2 slideshow, mais quand je le fait, le 2ème n'est pas pris en compte, il se met en overflow. Faut-il réinsérer une 2e fois le code JS, suffit-il de renommer la classe .slide ?
Si quelqu'un à la solution.
Je vous remercie.
gravatar
le 08 janvier à 12h37 Flo Répondre Bonjour à tous,

MERCI François, super tuto, super code, je l'ai intégré dans une page web, néanmoins le contrôle gauche ne s'affiche jamais et je n'arrive pas à résoudre le problème...

Quelqu'un à déjà rencontré le souci???


@27beatbox: j'ai eu le même problème, je l'ai résolu mais le résultat était une page extrêmement lourde à charger et quelque bug sur IE. J'ai donc fais plusieurs pages...
gravatar
le 01 février à 10h36 seb Répondre Salut,
il me semble que dans le tutorial il pourrait être utile au tout début de préciser que le slideshow est stylé par la classe
#slideshow {
margin:0 auto;
width:640px;
height:263px;
background:transparent url(img/bg_slideshow.jpg) no-repeat 0 0;
position:relative;
}
Après avoir copié bètement le code pas à pas je me suis rendu compte que cela
marchait mieux avec !!

Merci beaucoup en tous cas.
gravatar
le 01 février à 10h51 Jutix Répondre J'adore smile
gravatar
le 14 février à 10h00 Jonathan Répondre Bonjour,

Moi j'aurais une question, est-il possible de rendre les diapositives en lecture automatique (plus de flèches pour les tourner nous même).

J'aimerais enlever la "fonction" manuelle...
gravatar
le 14 février à 10h04 Jonathan Répondre Je retire ma question, j'ai réussi à me débrouiller finalement :p (4min après)
gravatar
le 15 février à 00h37 laetitia Répondre bonjour !
un grand merci pour ce tuto qui est extra ... !!
je débute , alors c'est vraiment super ..

par contre un petit soucis ...? le slideshow fonction niquel dans firefox , IE 7 ,safari , mais alors google chrome ne prend pas du tout, le design et la structure ... et ne prends forcement pas le scroll automatique qui est prevu pour IE ..
Y a t'il une solution pour ce nouveau navigateur qui est un petit peu capricieux ?
gravatar
le 19 février à 11h25 Thalie Répondre Bonjour, alors déjà un grand merci pour ce tuto, il es super smile
Ensuite j'ai un problème, j'ai essayé de l'appliquer sur mon site, mais j'ai un petit problème, surement du au css, mais je ne trouve pas...
Alors je vous montre:
voici un screen : http://s2.noelshack.com/uploads/images/11341280898486_probleme.jpg
Les images des mes deux slide ce chevauche ....
Merci d'avance pour votre aide.
gravatar
le 04 mars à 12h00 Gotcha Répondre Bonjour,

Merci pour ces tutaux et ces exemples fort intéressants.

J'aurais une question : sur certain sliders, au survole de la souris l'animation se gèle tant que le pointeur est au dessus du slider.
Serait-il possible de faire de même avec le slider proposé dans ce tutorial ?

En vous remerciant.

Requête en cours, veuillez patienter...

Ajouter un commentaire