Principe
La Web Animations API (WAAPI) est une API JavaScript qui permet de générer des animations.
Fortement inspiré des règle CSS @keyframes.
<div></div>
const div = document.querySelector("div");
const keyframes = [
{
borderRadius: 0,
backgroundColor: "red",
},
{
borderRadius: "50%",
transform: "translate(100px)",
},
{
backgroundColor: "green",
transform: "translate(200px)",
},
];
const options = {
duration: 4000,
iterations: "Infinity",
direction: "alternate",
};
const animation = div.animate(keyframes, options);
Définition : animate(keyframes, options)
animate est une méthode du constructeur Element qui permet de créer un objet Animation et de le lancer.
Définition : keyframes
keyframes peut être un tableau d'objets.
Chaque objet représente une étape dans l'évolution de l'élément HTML visé. Il est constitué de :
css : une suite de propriétés CSS avec leurs valeurs.
offset : la propriété offset permet de modifier l’état d'avancement de chaque étape dans l'animation. Ce nombre est compris entre 0 et 1. Elle est optionnelle. Sans offset, chaque objet se partage le temps d'animation.
const keyframes = [
{
borderRadius: 0,
backgroundColor: "red",
offset: 0, // 0%
},
{
borderRadius: "50%",
transform: "translate(100px)",
offset: 0.8, // 80%
},
{
borderRadius: 0,
backgroundColor: "green",
transform: "translate(200px)",
offset: 1, // 100%
},
];
keyframes peut être un objet.
Chaque propriété de l'objet est une propriété css ou offset dont la valeur est un tableau des différents temps de l'évolution de l'animation.
const keyframes = {
borderRadius: [0, "50%", 0],
backgroundColor: ["red", "red", "green"],
transform: [, "translate(100px)", "translate(200px)"],
offset: [0, 0.8, 1]
};
Définition : options
options est un objet qui permet de gérer différentes propriétés de l'animation :
delay : retard en millisecondes
direction : sens de l'animation (normal, reverse, alternate, alternate-reverse)
duration : durée en millisecondes
easing : fonction d'évolution de l'animation (linear, ease, ease-in, ease-out, ease-in-out, cubic-bezier(a,b,c,d)
fill : état à la fin de l'animation (backwards, forwards, both, none)
iterations : nombre de fois (un nombre ou Infinity)
const options = {
duration: 4000,
iterations: "Infinity",
direction: "alternate",
};
Exemple : Exemple
const div = document.querySelector("div");
const keyframes = [
{
borderRadius: 0,
backgroundColor: "red",
offset: 0, // 0%
},
{
borderRadius: "50%",
transform: "translate(100px)",
offset: 0.8, // 80%
},
{
backgroundColor: "green",
transform: "translate(200px)",
offset: 1, // 100%
},
];
const options = {
duration: 4000,
iterations: "Infinity",
direction: "alternate",
};
const animation = div.animate(keyframes, options);