|
Mise à jour : 04/01/2011
195 visites depuis 7 jours,
classé 424/786
|
!
.
. En français, il est plutôt recommandé de parler de module d'extension, mais le terme anglais est bien plus utilisé, alors c'est celui-ci que nous allons utiliser.1 2 | $('p').notreSuperPlugIn(); //Là, tous les paragraphes de notre page verront notre plug-in appliqué sur eux ! |
.
?1 2 3 4 5 6 7 8 9 10 11 | jQuery.extend(jQuery.fn, { notreSuperPlugIn: function(parametres) { //Code de notre plug-in ici }, secondPlugIn: function(parametres) { //Code du second plug-in ici } }); |
.1 2 3 4 | jQuery.fn.notreSuperPlugIn=function(parametres) { //Code de notre plug-in ici }; |
1 2 3 4 5 6 7 | (function($) { $.fn.notreSuperPlugIn=function(parametres) { //Code de notre plug-in ici }; })(jQuery); |
!1 | $('p').notreSuperPlugIn(); |
1 2 3 | $('div').notreSuperPlugIn(); //this fera référence à l'objet jQuery $('div') $('#header').notreSuperPlugIn(); //this fera référence à l'objet jQuery $('#header') $('table.commentaire').notreSuperPlugIn(); //this fera référence à l'objet jQuery $('table.commentaire') |
.1 2 3 4 5 6 7 8 9 10 | (function($) { $.fn.notreSuperPlugIn=function(parametres) { this.each(function() { //Code de notre plug-in ici }); }; })(jQuery); |
1 | $('p').css('color','red').appendTo($('div')).show(); |
1 | $('p').css('color','red').notreSuperPlugIn().appendTo($('div')).show(); |
1 2 3 4 5 6 7 8 9 10 11 12 | (function($) { $.fn.notreSuperPlugIn=function(parametres) { this.each(function() { //Code de notre plug-in ici }); return this; }; })(jQuery); |
1 2 3 4 5 6 7 8 9 10 | (function($) { $.fn.notreSuperPlugIn=function(parametres) { return this.each(function() { //Code de notre plug-in ici }); }; })(jQuery); |
.
.
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | (function($) { $.fn.hoverFade=function() { return this.each(function() { //On veut que l'élément change au passage de la souris, on utilise donc mouseover() ! $(this).mouseover(function() { //On diminue donc l'opacité lentement $(this).fadeOut('slow',function() { //Une fois l'élément invisible, on le fait réapparaitre rapidement ! $(this).fadeIn('fast'); }); }); }); }; })(jQuery); |
.
? Commençons par enregistrer le plug-in dans un fichier : pour ce faire, on utilise généralement deux méthodes différentes, selon la version de votre fichier :
.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 | <!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>Notre super plug-in jQuery !</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="jquery.hoverFade.js"></script> <script type="text/javascript"> $(function() { $('a, h1').hoverFade().css('color','red'); }); </script> </head> <body> <h1>Lorem ipsum dolor sit amet</h1> <p> Lorem ipsum dolor sit amet, <a href="#">consectetur adipiscing</a> elit. Praesent sit amet libero odio. Maecenas auctor varius lorem at commodo. Praesent egestas consectetur hendrerit. Pellentesque condimentum dictum enim, scelerisque convallis erat mollis quis. Ut cursus tellus sed odio feugiat aliquam. Aenean vel orci nunc. Cras pharetra tortor a elit laoreet <a href="#">non ornare magna fermentum</a>. Fusce convallis tincidunt rhoncus. Nunc ac elit in tellus facilisis euismod. Donec vel mi urna. Aliquam in urna dolor, <a href="#">non blandit sapien</a>. Proin consequat, arcu non dignissim semper, nibh tellus condimentum turpis, vel ornare ipsum massa rhoncus eros. </p> </body> </html> |
.
.
?
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | (function($) { $.fn.hoverFade=function(vitesseFadeOut, vitesseFadeIn) { return this.each(function() { //On veut que l'élément change au passage de la souris, on utilise donc mouseover() ! $(this).mouseover(function() { //On diminue donc l'opacité lentement $(this).fadeOut(vitesseFadeOut,function() { //Une fois l'élément invisible, on le fait réapparaitre rapidement ! $(this).fadeIn(vitesseFadeIn); }); }); }); }; })(jQuery); |
1 | $('p').hoverFade(2500,2000); |
1 | $.fn.unSuperPlugIn=function(vitesse, couleur, largeur, hauteur, position_x, position_y, cible){}; |
.
.
.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 | (function($) { $.fn.hoverFade=function(options) { //options est donc un objet littéral, ne l'oublions pas ! //On définit nos paramètres par défaut var defauts= { "vitesseFadeOut": "slow", "vitesseFadeIn": "fast" }; //On fusionne nos deux objets ! =D var parametres=$.extend(defauts, options); return this.each(function() { //On accèdera à la vitesse du fadeOut via parametres.vitesseFadeOut //et à celle du fadeIn via parametres.vitesseFadeIn //On veut que l'élément change au passage de la souris, on utilise donc mouseover() ! $(this).mouseover(function() { //On diminue donc l'opacité lentement $(this).fadeOut(parametres.vitesseFadeOut,function() { //Une fois l'élément invisible, on le fait réapparaître rapidement ! $(this).fadeIn(parametres.vitesseFadeIn); }); }); }); }; })(jQuery); |
.1 2 3 | $('a').hoverFade(); $('h1').hoverFade({"vitesseFadeIn": 2350}); $('#test').hoverFade({"vitesseFadeIn": 2350,"vitesseFadeOut": "normal"}); |
1 2 3 4 5 6 | var defauts= { "vitesseFadeOut": "slow", "vitesseFadeIn": "fast", "callback": null }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $(this).mouseover(function() { //On diminue donc l'opacité lentement $(this).fadeOut(parametres.vitesseFadeOut,function() { //Une fois l'élément invisible, on le fait réapparaitre rapidement ! $(this).fadeIn(parametres.vitesseFadeIn,function() { //Si le parametre callback ne vaut pas null, c'est qu'on a précisé une fonction ! if(parametres.callback) { parametres.callback(); } }); }); }); |
1 2 3 4 | $('a, h1').hoverFade({"callback": function() { alert('Animation finie !'); }}); |
.
. Pourquoi ne pas donner de paramètres aux fonctions que l'on passe en paramètre ? De cette façon :1 2 3 4 | $('a, h1').hoverFade({"callback": function(data) { alert('Voici ce que contient data : '+data); }}); |
. Rappelez-vous comment nous avons procédé tout à l'heure : nous avons appelé la fonction dans le code du plug-in, via l'instruction suivante :1 2 3 4 | if(parametres.callback) { parametres.callback(); } |
1 2 3 4 | if(parametres.callback) { parametres.callback("toto",23,$(this).text()); } |
) :1 2 3 4 | $('a, h1').hoverFade({"callback": function(data,radiateur,chocolat) { alert("Voici ce que contient data : " + data + "\nEt radiateur : " + radiateur + "\nEt enfin chocolat : " + chocolat); }}); |
.1 2 3 4 5 6 | $('a, h1').hoverFade({"callback": function() { //On peut mettre ce que l'on veut ici, on ne peut juste pas accéder aux trois variables qu'on l'on a défini dans notre plug-in =) alert("Voici ce que contient data : " + data + "\nEt radiateur : " + radiateur + "\nEt enfin chocolat : " + chocolat); //Puisqu'on essaye d'accéder aux variables, le script plante, alors attention ! }}); |
.
.
.
) :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 | <!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="jquery.imageSlide.js"></script> <script type="text/javascript"> $(function() { $('#galerie').imageSlide(); //Appel par défaut du plug-in }); </script> </head> <body> <div style="text-align: center;"> <h1>Le plug-in imageSlide !</h1> <p id="galerie" style="margin: auto;"> <img src="1.jpg" title="Zèbre" alt="http://fr.wikipedia.org/wiki/Z%C3%A8bre" /> <img src="2.jpg" title="Pont" alt="http://fr.wikipedia.org/wiki/Pont" /> <img src="3.jpg" title="Plage" alt="http://fr.wikipedia.org/wiki/Plage" /> <img src="4.jpg" title="Fleurs" alt="http://fr.wikipedia.org/wiki/Fleur" /> </p> <p id="description">Zèbre</p> <p style="tetx-align: right;">Images provenant de <a href="http://www.freephotobank.org/">http://www.freephotobank.org/</a>.</p> </div> </body> </html> |
.
), vous pouvez bien évidemment utiliser les vôtres
.
.
.
.
.
.
. Sur ce, voici donc ma solution. Ce n'est pas la seule façon de coder ce plug-in et ce n'est probablement pas la meilleure. Mais au moins elle fonctionne, et elle applique tout ce qu'on a vu
.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 | (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); 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=element.find('img').length; //Le compteur pour nous permettre de parcourir les images var compteur=0; //On modifie le style de notre galerie element.css( { 'border': '1px solid #000', 'width': parametres.width, 'height': parametres.height, 'overflow': 'hidden' }).find('img').each(function(id) //Puis on parcourt enfin chaque image ! { //Si on doit adapter les dimensions des images, on le fait if(parametres.scaleWidth) { $(this).css('width','100%') } if(parametres.scaleHeight) { $(this).css('height','100%') } //Si on fait des liens, on change le curseur et on //enlève la bordure bleue toute moche if(parametres.makeLinks) { $(this).css( { 'cursor': 'pointer', 'border': '0px' }); //Et on entoure l'image de son lien, récupéré via le alt ! $(this).wrap('<a href="'+$(this).attr('alt')+'"></a>'); } //On ne fait apparaitre que la première image if(id>0) { $(this).hide(); } }); //Et on définit enfin notre défilement setInterval(function() { //On récupère l'image actuellement visible et on la fait disparaitre element.find('img:eq('+compteur+')').fadeOut(function() { //On incrémente le compteur si on n'est pas sur la dernière image //Sinon, on le remet à 0 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); |
.1 2 3 4 5 6 7 8 9 10 | $('#galerie').imageSlide( { 'width': '500px', 'height': '300px', 'makeLinks': true, 'callback': function(image) { $('#description').text(image.attr('title')); } }); |
?
?
.|
|
jQuery : écrivez moins pour faire plus ! |
|
|
Dynamisez vos sites web avec Javascript ! |
|
|
Le JavaScript moderne |
|
|
Introduction à Internet |