Sondage du mois

Sondage du mois
 

  La connaissance ne vaut que si elle est partagée par tous




 
  Astuce Adobe Photoshop : Raccourci Aide : F1




Les tutoriaux: Index » Jquery » ScriptsJquery » Transitions d'images

Introduction

  • Tutoriel posté par Sky
  • 1759 lectures
  • Mis en ligne le 27-01-2011
  • Dernière mise à jour le 28-01-2011
  • Ce tutoriel a été estimé comme simple.


Automatic Translations:
Translate Into English Translate Into German Translate Into Italian Translate Into Spanish Translate Into Portuguese

Vous trouverez ci-dessous un technique personnel pour réaliser des transitions d'images
avec CSS et jQuery. Une méthode simple, un script simple, une mise en place simple. A vous les transitions d'images ! :)




Méthodologie

Avant de commencer


Je me suis longtemps posé la question quant aux transitions d'images qu'on peut faire avec Flash ou jQuery. Comment faire pour en réaliser quelques unes sans avoir à coder les lignes imbuvables de ce type de plugins.

J'ai trifouillé mon petit cerveau et j'ai mis en place deux exemples qui s'appuient plus sur le CSS que sur jQuery. Vous verrez que les lignes de codes sont assez courtes et la mise en place sur votre site extrêmement simple.

Première transition




Commençons tout d'abord par l'intégration html du bloc qui contiendra nos images.

CODE HTML


<div id="slider">
<img src="img/1.jpg" alt="" />
<img src="img/2.jpg" alt="" />
<img src="img/3.jpg" alt="" />
<img src="img/4.jpg" alt="" />
</div>



Pas vraiment compliqué cette partie !

Le CSS de ce bloc slider est le suivant :

CODE CSS


#slider {
width:618px; 
height:246px;
position:relative;
z-index:1500;
/* Important pour que tout ce qui dépasse soit caché ! */
overflow:hidden; 
}
/* On cache toute les images du bloc */
#slider  img{
display:none;
}

/* Cette classe est importante pour cette transition ! */
.slice {
display:block;
position:absolute;
height:246px;
}



Vous remarquerez que nous cachons directement toutes images du bloc #slider.
En effet les afficher est inutile, nous avons besoin simplement de savoir quelles sont la pour pouvoir interagir avec elles avec jQuery.

Pour ce premier effet de transition nous avons besoin uniquement de cela, passons maintenant à la partie javascript.

CODE JAVASCRIPT


<script type="text/javascript">
// On compte le nombre d'images dans le bloc #slider
var nombre = $("#slider img").length;
// On charge tout de suite la première image qui n'a pas besoin de transition
var firstimg = $("#slider").find('img:first');
$("#slider").css('background','url("'+ firstimg.attr('src') +'") no-repeat');

// On créé une variable qui nous servira à afficher la deuxième image, puis la troisième etc.
var  slice = 1;
// On crée une variable qui nous servira à incrémenter le z-index des images
var zindex = 60;

// On commence l'interval 
var anime_slider = setInterval( function(){

// Cette ligne nous dis grossomodo que si on a atteint la dernière image on repasse à la première
if(slice == nombre) { slice = 0;} 

/* On crée une variable newimg qui récupère la valeur de src de l'image
Vous remarquerez également le selecteur :eq("+slice+") qui nous sert à sélectionner 
la bonne image avec la var slice */
var newimg = $("#slider img:eq("+slice+")").attr('src');

// On crée un div avec un id unique 
$("#slider").append('
'); // On lui donne un background correspondant à l'image et surtout un width de 0px $('#my_'+slice+'').css({'z-index': zindex, left:'0px',top:'0px', width: '0px',background: 'url("'+ newimg +'") no-repeat'}); // On démarre animate qui part de 0px vers 618px et on incrément slice de 1 pour la prochaine image $('#my_'+slice+'').animate({ width:'618px'},1000,function (){ slice = slice+1;}); // On incrémente le z-index zindex = zindex+1; }, 3500); </script>



Cette transition est très simple à mettre en oeuvre et est du plus bel effet :)

Deuxième transition




Le principe de cette transition d'images est de créé X bloc div en tenant compte de la longueur de la div principale.
Prenons comme exemple que la div #slider fait 100 pixels, nous créons 10 div de 10 pixels et nous leur attribuons en background l'image en position x et y. en décalant le background de 10px à chaque div.

1er div -> background de 0 à 10px
2eme div -> background de 10 à 20px
3eme div -> background de 20 à 30px
etc.

Ces div sont placés en haut de l'image courante et on lance un animate() sur chaque div, ce qui nous donne l'effet escompté. Voyons comment retranscrire cette idée en code

CODE HTML


<div id="slider">
<img src="img/1.jpg" alt="" />
<img src="img/2.jpg" alt="" />
<img src="img/3.jpg" alt="" />
<img src="img/4.jpg" alt="" />
</div>



Pas vraiment compliqué cette partie !

Le CSS de ce bloc slider est le suivant :

CODE CSS


#slider {
width:618px; 
height:246px;
position:relative;
z-index:1500;
/* Important pour que tout ce qui dépasse soit caché ! */
overflow:hidden; 
}
/* On cache toute les images du bloc */
#slider  img{
display:none;
}

/* Cette classe est importante pour cette transition ! */
.slice {
display:block;
position:absolute;
height:246px;
}

CODE JAVASCRIPT


<script type="text/javascript">
// On compte le nombre d'images
var nombre = $("#slider img").length;

// On spot la première image et on l'affiche en background
var firstimg = $("#slider").find('img:first');
$("#slider").css('background','url("'+ firstimg.attr('src') +'") no-repeat');

// slice pour savoir le numéro d'image à afficher, on l'incrémente en fin de script
var  slice = 1;
// idem pour zindex, on incrémente le z-index en fin de script pour assurer que l'image soit toujours par dessus
var zindex = 70;

// Variable qui nous sert pour créer nos multiples div, cette variable nous servira à donner un id unique à chaque div
var div = 1;

// Et c'est parti on lance l'interval
var anime_slider = setInterval( function(){

// si slice est égale à nombre c'est que la dernière image est passé on repasse donc à la première
if(slice == nombre) { slice = 0;} 

// On spot l'image avec :eq() et on prend son attribut src 
var newimg = $("#slider img:eq("+slice+")").attr('src');

// Variable pour définir le nombre de div qu'on veux pour l'effet, ici 5 blocs. 618 étant la longueur de la div principale
var largeur = 618/5;

// Durée de l'animation du premier bloc
duree = 400;

// On boucle pour la création des divs et l'attribution du background de chaque div et on anime
for(var i = 0; i < 5; i++){
$("#slider").append('
'); var fin = largeur*i+largeur; if(i == 0){ var fin = 0;}else{ var fin = largeur*i;} $('#my_'+div+'').css({'z-index': zindex, left: ''+largeur*i+'px',top:'0px', height: '0px', width: ''+largeur+'px',background: 'url("'+ newimg +'") no-repeat -'+fin+'px 0px '}); $('#my_'+div+'').animate({ height:'246px'},duree); // On incrémente la durée du prochain animate pour donner cet effet d'escalier duree = duree+250; // nouvel id pour le prochain div div=div+1; } // Fin de boucle FOR // On incrément slice pour choisir la prochaine image slice = slice+1; // On incrémente le z-index pour afficher toujours au dessus zindex = zindex+1; }, 4000); </script>

Notes

  Evaluez le tutorial (5 Votes)

5
0
0

Pour les questions ou d'éventuelles remarques, dirigez vous vers le forum.

Réagir sur ce tutoriel - [Jquery] Transitions d'images

DERNIÈRES PUBLICATIONS DE OPEN-MOUTHED

En direct de open-mouthed.com