Salut!

J'ai suivi, en complément des informations présentes un tuto.

Pour m'entraîner, j'ai essayé d'ajouter des fonctionnalités au slider. Je souhaitais ajouter un bouton "Précédent", un bouton "Suivant" et la mise en pause du défilement lorsque la souris passait au dessus d'une image. Tout cela fonctionne, mais je pense que mon code est loin d'être optimisé et j'aurais aimé avoir l'avis de personnes travaillant régulièrement et depuis longtemps avec jQuery.

Pouvez-vous me donner votre avis et des conseils pour l'améliorer svp ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
(function($)
{
    $.fn.imageSlide=function(options)
    {
        //On définit nos paramètres par défaut
        var defauts=
        {
	    'interval': 5000,		//Intervalle entre chaque image, en millisecondes
	    'width': '300px',		//Largeur de la galerie
	    'height': '150px',		//Hauteur de la galerie
	    'scaleWidth': true,		//Doit-on adapter la largeur de l'image ?
	    'scaleHeight': true,	        //Doit-on adapter la hauteur de l'image ?
	    'makeLinks': false,		//Doit-on créer des liens ?
	    'callback': null		//Fonction appelée à chaque nouvelle image
        };
 
	//On fusionne nos deux objets ! =D
        var parametres=$.extend(defauts,options);
 
	//Si l'intervalle est trop court, on le fixe à 1 seconde
	//pour éviter que le défilement soit trop rapide
	parametres.interval=Math.max(1000,parametres.interval);
 
	var play=true;
 
	return this.each(function()
	{
	    //On stocke notre élément dans une variable par commodité
	    var element=$(this);
 
	    //On compte le nombre d'images de notre galerie
	    var totalImages=$(this).find('img').length;
 
	    //Le compteur pour nous permettre de parcourir les images
	    var compteur=0;
 
	    //On insère le bouton permettant d'afficher l'image précédente
	    element.before('<div style="float:left;"><img id="precedent" src="images/precedent.png" style="height: 48px;"></div>');
 
            $('#precedent').hide();
 
	    //On insère le bouton permettant d'afficher l'image suivante
	    element.after('<div style="float:left;"><img id="suivant" src="images/suivant.png" style="height: 48px;"></div>');
 
	    //Lorsque la souris passe au dessus de l'image, on stoppe le défilement
	    element.mouseenter(function()
	    {
	        play=false;
	    });
 
	    //Lorsque la souris quitte l'image, on active de nouveau le défilement
	    element.mouseleave(function()
	    {
	        play=true;
	    });
 
	    //Lorsque l'on clique sur l'image "précédent"
	    $('#precedent').click(function()
	    {
	        play=false; //on stoppe le défilement
		if(compteur>0) //si on est pas sur la première image
		{
		    // On fait disparaître l'image en cours
		    element.find('img.slide_img:eq('+compteur+')').fadeOut(function()
		    {
		        //On recule d'une image
			compteur--;
			//Et on fait donc apparaitre l'image
			element.find('img.slide_img:eq('+compteur+')').fadeIn();
		    });
 
		    //On attend 5 secondes et on active de nouveau le défilement
		    setTimeout(function()
		    {
		        play=true;
		    }, 5000);
		}
 
		if(compteur==1)
		{
		    $('#precedent').hide();
		}
		else
		{
		    $('#suivant').show();
		}
	    });
 
	    //Lorsque l'on clique sur l'image "suivant"
	    $('#suivant').click(function()
	    {
	        play=false; //on stoppe le défilement
		if(compteur<totalImages-1) //si on est pas sur la dernière image
		{
		    // On fait disparaître l'image en cours
		    element.find('img.slide_img:eq('+compteur+')').fadeOut(function()
		    {
		        //On avance d'une image
			compteur++;
			//Et on fait donc apparaitre l'image
			element.find('img.slide_img:eq('+compteur+')').fadeIn();
		    });
 
		    //On attend 5 secondes et on active de nouveau le défilement
		    setTimeout(function()
		    {
		        play=true;
		    }, 5000);
		}
		if(compteur==(totalImages-2))
		{
		    $('#suivant').hide();
		}
		else
		{
		    $('#precedent').show();
		}
	    });
 
	    //On dimensionne le cadre accueillant les images
	    element.css({
		'width': parametres.width,
		'height': parametres.height,
		'border': 'solid black 1px',
		'overflow': 'hidden'
	    })
 
	    .find('img').each(function(id)
	    {
	        if(parametres.scaleWidth)
		{
		    $(this).css({
			'width': '100%'
		    });
		}
		if(parametres.scaleHeight)
		{
		    $(this).css({
			'height': '100%'
		    });
		}
		if(parametres.makeLinks)
		{
		    link=$(this).attr('alt');
		    $(this).wrap("<a href='"+link+"'></a>");
		}
		if(id>0)
		{
		    $(this).hide();
		}
	    });
 
	    setInterval(function()
	    {
	        if(play)
                {
		    element.find('img.slide_img:eq('+compteur+')').fadeOut(function()
		    {
		        if(compteur!=totalImages-1)
			{
			    compteur++;
			}
			else
			{
			    compteur=0;
			}
			//Et on fait donc apparaitre l'image suivante
			element.find('img:eq('+compteur+')').fadeIn(function()
			{
			    //Et si on a une fonction définie, on l'appelle !
			    //Et on lui passe notre image en paramètre
			    if(parametres.callback)
			    {
			        parametres.callback($(this));
			    }
			});
		    });
		}
	    }, parametres.interval);
	});
    }
})(jQuery);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitionnal//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
	<head>
		<title>Le plug-in imageSlide !</title>
		<meta http-equiv="Content-Type" content="text/html; charset=charset=iso-8859-1" />
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
		<script type="text/javascript" src="plugins/jquery-imageSlide/jquery.imageSlide.js"></script>
		<script type="text/javascript">			
			$(function()
			{
				$('#galerie').imageSlide(
				{
					'width': '500px',
					'height': '300px',
					'makeLinks': true,
					'callback': function(image)
					{
						$('#description').text(image.attr('title'));
					}
				});
			});
		</script>
	</head>
	<body>
		<div style="text-align: center;">
			<h1>Le plug-in imageSlide !</h1>
			<p id="galerie" style="margin: auto; float: left;">
				<img src="images/1.jpg" class="slide_img" title="Paysage large" alt="http://fr.wikipedia.org/wiki/Z%C3%A8bre" />
				<img src="images/2.jpg" class="slide_img" title="Montagne" alt="http://fr.wikipedia.org/wiki/Pont" />
				<img src="images/3.jpg" class="slide_img" title="Montagne brumeuse" alt="http://fr.wikipedia.org/wiki/Plage" />
				<img src="images/4.jpg" class="slide_img" title="Foret" alt="http://fr.wikipedia.org/wiki/Fleur" />
			</p>
			<p id="description">Paysage large</p>
			<p style="tetx-align: right;">Images provenant de <a href="http://www.freephotobank.org/">http://www.freephotobank.org/</a>.</p>
		</div>
	</body>
</html>
Pouvez-vous m'aider svp ?