-
Défilé d'images 2
Nous avons vu comment réaliser un défilé d'images, avec ou sans saccade mais il faut maintenant adapter notre animation en fonction du nombre d'images.
Une animation s'écrit, pour notre exemple: animation:son nom/temps du cycle/courbe de la translation/ infinie/normal (retour au départ à la fin)... soit:
animation:demo 10s linear infinite normal;
Votre animation peut tourner en boucle seule ou être déclenchée par un survol par:
animation-play-state:paused; l'animation est arrêtée et peut être lancée au survol, par exemple.
animation-play-state:running; l'animation tourne seule en automatique.
Les phases de l'animation peuvent être définies en %, ce qui est bien pratique puisque le temps général pourra être modifié pour être allongé (ralentir l'animation) ou raccourci (accélerer l'animation) sans avoir à revoir les phases d'animation.
Le nombre de phases sera adapté en fonction du nombre d'images et je vais vous proposer quelques modèles, que vous modifierez à votre gré.
Le nombre de secondes de votre animation correspond à 100% du temps.
Pour chaque image, il sera défini un temps d'affichage et un temps de translation; prenons un exemple:
Nous avons 2 images de 400px de large et une translation entre les deux: première image en position 0px,0px; elle sera affichée pendant 45% du temps, la translation se fera en 10% du temps et la seconde image sera affichée 45% du temps.
@keyframes ex0{
0% { transform:translate(0px,0px);}
45% {transform:translate(0px,0px);} ..........image 1 suivie de translation
55% {transform:translate(-400px,0px);}
100% {transform:translate(-400px,0px);} } ..........image 2A la fin du cycle, le montage recommencera par sa position de départ.
Voyons le principe avec 3 images: temps d'affichage de chaque image: 30% et temps de translation:5%
@keyframes ex1{
0% { transform:translate(0px,0px);}
30% {transform:translate(0px,0px);} .........image1
35% {transform:translate(-400px,0px);}
65% {transform:translate(-400px,0px);} .........image2
70% {transform:translate(-800px,0px);}
100% {transform:translate(-800px,0px);} } .........image3Le principe est acquit, voyons quelques nombres d'images souvent utilisés mais je vous laisse le soin d'adapter à vos valeurs.
Voyons le principe avec 4 images: temps d'affichage de chaque image: 23% et temps de translation:3% et 2% car la division n'est pas juste.
@keyframes ex2{
0% { transform:translate(0px,0px);}
23% {transform:translate(0px,0px);} ........image1
26% {transform:translate(-400px,0px);}
49% {transform:translate(-400px,0px);} ........image2
52% {transform:translate(-800px,0px);}
75% {transform:translate(-800px,0px);} ........image3
78% {transform:translate(-1200px,0px);}
100% {transform:translate(-1200px,0px);} } ........image4Voyons le principe avec 5 images: temps d'affichage de chaque image: 23% et temps de translation:3% et 2% car la division n'est pas juste.
100% divisé par 5 images et 4 translations peut donner:
17+4+17+4+17+4+17+3+17 ou 18+3+18+2+18+3+18+2+18 ou d'autres choix... !
@keyframes ex3{
0% { transform:translate(0px,0px);}
17% {transform:translate(0px,0px);} ........image1
21% {transform:translate(-400px,0px);}
38% {transform:translate(-400px,0px);} ........image2
42% {transform:translate(-800px,0px);}
59% {transform:translate(-800px,0px);} ........image3
63% {transform:translate(-1200px,0px);}
66% {transform:translate(-1200px,0px);} .......image4
83% {transform:translate(-1600px,0px);}
100% {transform:translate(-1600px,0px);} } ........image5
Dans le cas où vous voulez un montage sans saccade, avec la première image, répétée en dernière position, avec un temps d'affichage réduit, voici une proposition pour 5 images mais il y en a d'autres...
13+3+17+3+17+3+17+3+17+3+4
@keyframes ex4{
0% { transform:translate(0px,0px);}
13% {transform:translate(0px,0px);} ........image1
16% {transform:translate(-400px,0px);}
33% {transform:translate(-400px,0px);} ........image2
36% {transform:translate(-800px,0px);}
53% {transform:translate(-800px,0px);} ........image3
56% {transform:translate(-1200px,0px);}
73% {transform:translate(-1200px,0px);} .......image4
76% {transform:translate(-1600px,0px);}
93% {transform:translate(-1600px,0px);} .......image5
96% {transform:translate(-2000px,0px);}
100% {transform:translate(-2000px,0px);} } .......image1