-
Défilé d'images
Le défilés d'images permettent de présenter plusieurs images dans un volume réduit.
Le principe est de déplacer le bloc, contenant les images derrière un cadre qui n'affichera qu'une seule image; après la dernière image, le bloc revient rapidement en position de départ pour afficher la première image.
On peut souhaiter que le mouvement soit plus doux en passant de la dernière image à la première; il faut donc ajouter la première image à la fin de façon à ce qu'elle recouvre de façon invisible, celle en première position.
Nous cachons ce qui dépasse pour ne laisser apparaitre qu'une image (overflow:hidden), que vous pouvez animer au survol.
Comme vous le voyez, nous passons de la dernière image (bleu) à la première image (jaune) de façon rapide.
Code de l'exemple ci-dessus:
<div id="fd1">
<div id="def1">
<p style="width: 150px; height: 75px; background-color: yellow; float: left;"> </p>
<p style="width: 150px; height: 75px; background-color: green; float: left;"> </p>
<p style="width: 150px; height: 75px; background-color: lime; float: left;"> </p>
<p style="width: 150px; height: 75px; background-color: blue; float: left;"> </p>
</div>
</div>
<style type="text/css"><!--
#fd1{width:150px; height:75px; position:relative; z-index:2;border:4px solid red; overflow:hidden;}
#def1{animation:ex1 6s linear infinite; width:610px; height:75px; animation-play-state:paused;}
#def1:hover{animation-play-state:running;}
@keyframes ex1{
0% {transform:translate(0px,0px);}
23% {transform:translate(0px,0px);}
26% {transform:translate(-150px,0px);}
49% {transform:translate(-150px,0px);}
51% {transform:translate(-300px,0px);}
74% {transform:translate(-300px,0px);}
77% {transform:translate(-450px,0px);}
100% {transform:translate(-450px,0px);}
--></style>
Reprenons la construction de notre montage et ajoutons le première image à la fin, en agrandissant d'autant, le bloc qui la contient; Pour que le temps d'affichage de la première image, recouverte de la même, en dernière position, soit à peu près le même que le temps d'affichage des autres images, le recouvrement dernière/première sera court et réglé par l'animation.
Survolez ce montage pour l'animer; vous constatez que le cycle n'a pas de saccade pour passer de la dernière (jaune) à la première (jaune !) car elles se recouvrent pendant 4% du temps, dans mon exemple.
<div id="fd3">
<div id="def3">
<p style="width: 150px; height: 75px; background-color: yellow; float: left;"> </p>
<p style="width: 150px; height: 75px; background-color: green; float: left;"> </p>
<p style="width: 150px; height: 75px; background-color: red; float: left;"> </p>
<p style="width: 150px; height: 75px; background-color: blue; float: left;"> </p>
<p style="width: 150px; height: 75px; background-color: yellow; float: left;"> </p>
</div>
</div>
<style type="text/css"><!--
#fd3{width:150px; height:75px; position:relative; z-index:2;border:4px solid red; overflow:hidden;}
#def3{animation:ex2 6s linear infinite; width:750px; height:75px; animation-play-state:paused;}
#def3:hover{animation-play-state:running;}
@keyframes ex2{
0% {transform:translate(0px,0px);}
22% {transform:translate(0px,0px);}
24% {transform:translate(-150px,0px);}
46% {transform:translate(-150px,0px);}
48% {transform:translate(-300px,0px);}
70% {transform:translate(-300px,0px);}
72% {transform:translate(-450px,0px);}
94% {transform:translate(-450px,0px);}
96% {transform:translate(-600px,0px);}
100% {transform:translate(-600px,0px);}}
--></style>
Je vais préparer une autre page, pour les valeurs de l'animation, qui sont à calculer selon le nombre d'images de votre montage et selon les temps affichage/translation que vous souhaitez et que vous adapterez sur mes bases.