Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Modifier les effets de transition en Javascript
A l'occasion de cette nouvelle
astuce Javascript, nous allons découvrir comment influer dynamiquement sur des
animations dont les
transitions sont prédéfinies par les
styles Css.
Dans l'exemple illustré par la capture, une
forme géométrique carrée se propose. Lorsque l'utilisateur passe la souris dessus, elle se transforme progressivement en un
cercle. Cette
transformation se joue sur une
durée d'une seconde. Mais l'utilisateur peut modifier le
délai et la
durée dans les deux zones de liste placées au-dessus. Dès lors, s'il clique sur le
bouton Modifier, il influe sur les
propriétés Css de cette
transition par le
code Javascript. Et en effet, s'il pointe de nouveau sur la forme géométrique, elle change toujours pour devenir un rond mais en respectant ces nouveaux paramètres, notamment de
durée, pour une
animation plus lente et progressive.
Sources de travail
Pour la démonstration de cette nouvelle
astuce Javascript, nous proposons d'appuyer l'étude sur une
source Html existante et accompagnée de sa
feuille de styles.
Comme vous le constatez, la décompression livre le fichier de la
page Web (index.htm), accompagné notamment de ses
feuilles de styles dans le
sous dossier Css.
- Double cliquer sur ce fichier index.htm pour l'ouvrir dans le navigateur Web par défaut,
Si vous pointez sur la forme géométrique qui se propose, celle-ci se transforme effectivement en un
cercle, tout en respectant une
durée d'animation d'une seconde. En revanche et pour l'instant, si vous modifiez les paramètres dans les zones de liste, que vous cliquez sur le
bouton Modifier et que vous survolez de nouveau le carré, l'
animation n'est absolument pas impactée.
- A la racine du dossier de décompression, cliquer droit sur le fichier index.htm,
- Dans le menu contextuel, choisir de l'ouvrir avec un éditeur comme le Notepad ++,
Nous accédons ainsi au
code Html de la
page Web. La construction qui nous intéresse est placée plus bas dans la page, plus précisément dans le calque d'
identifiant auCentre.
...
<div id="auCentre">
<div class="reglages">
Durée (s) ?
<select id="duree">
<option value="1">1 s</option>
<option value="2">2 s</option>
<option value="5">5 s</option>
<option value="10">10 s</option>
</select>
</div>
<div class="reglages">
Délai (s) ?
<select id="delai">
<option value="0">0 s</option>
<option value="1">1 s</option>
<option value="2">2 s</option>
<option value="5">5 s</option>
<option value="10">10 s</option>
</select>
</div>
<div class="reglages">
<button class="btnMenu" style="height:30px; width:150px;" onclick="modifProp()">Modifier</button>
</div>
<br /><br />
<div style="float:left;margin:20px 0px 0px 400px;">
<div id="cercle" class="carre">
Le carré devient rond !
</div>
</div>
</div>
...
Les deux zones de liste portent les identifiants respectifs
duree et
delai. Ces
noms d'objets sont importants pour pouvoir piloter ces zones par le
code Javascript, notamment pour prélever les réglages qu'elles portent. Le bouton appelle la
fonction modifProp au clic (onclick="modifProp()"). Cette
fonction existe déjà dans la
section de script en
bas de la page Web. Mais elle est vide à ce stade. Enfin, le calque de la forme géométrique porte l'
identifiant cercle. De plus, il est régi par un
style nommé
carre.
- A la racine du dossier de décompression, double cliquer sur le sous dossier Css pour l'ouvrir,
- Dès lors, cliquer droit sur la feuille de styles les-styles.css,
- Dans le menu contextuel, choisir de l'ouvrir avec un éditeur comme le Notepad ++,
Vous pouvez constater la présence du
style associé au
calque d'identifiant cercle :
...
#cercle {
transition: all 1s;
transition-delay: 0s;
}
#cercle:hover {
border-radius: 50%;
}
...
Il définit la transformation à réaliser au passage de la souris sur la forme géométrique (hover). Il règle aussi la durée et le délai à respecter avec les
attributs transition et
transition-delay. C'est la raison pour laquelle l'animation se joue au premier passage de la souris. Et c'est sur ces
attributs Css prédéfinis que nous devons maintenant influer par le
code Javascript.
Stocker les réglages des zones de liste
Pour débuter, nous devons commencer par récupérer les valeurs inscrites dans les zones de liste. Ce sont ces réglages que nous appliquerons ensuite aux attributs de transition du
calque d'identifiant cercle.
- Revenir sur le code de la page Html,
- Tout en bas, entre les bornes de la fonction, ajouter les déclarations de variables suivantes :
...
var laDuree, leDelai, leCercle;
...
Nous prévoyons ainsi une variable pour mémoriser la
durée, une autre pour le
délai et une dernière pour représenter le
calque de la forme géométrique à transformer.
Il est maintenant question de réaliser les affectations. Et comme vous le savez très bien, c'est la
méthode getElementById de l'
objet Javascript document qui permet de pointer sur un
élément Html reconnu par son identifiant.
- A la suite du code de la fonction, ajouter les trois affectations suivantes :
...
laDuree = document.getElementById("duree").value + "s";
leDelai = document.getElementById("delai").value + "s";
leCercle = document.getElementById("cercle");
...
Nous l'avions annoncé, grâce à la
méthode getElementById, nous pointons respectivement sur les
éléments Html duree,
delai et
cercle. Dans les deux premiers cas, c'est la
propriété Value qui permet d'accéder aux contenus des zones de liste. Notez la concaténation avec une
lettre s entre guillemets. En
Css, c'est ainsi que les délais et durées doivent être définis. Dans le troisième cas, nous récupérons simplement l'
objet Html représentant le calque de la forme géométrique. C'est donc désormais la
variable leCercle qui le pilote.
Définir les paramètres de l'animation
Maintenant que les réglages et que le calque cible sont stockés en variables, il ne nous reste plus qu'à définir les
paramètres de la transition. C'est bien sûr la
propriété Style de la
variable objet leCercle qui va nous permettre de descendre jusqu'aux
attributs Css à régler.
- A la suite du code de la fonction, ajouter les trois affectations suivantes :
...
leCercle.style.transitionDuration = laDuree;
leCercle.style.transitionDelay = leDelai;
leCercle.style.transitionTimingFunction = "ease";
...
Comme souvent en
Javascript, le tiret séparant les mots clés des attributs est remplacé par cette fameuse casse Chameau. C'est ainsi que l'
attribut Css transition-delay devient la
propriété Javascript transitionDelay. Nous réglons donc la durée, le délai mais aussi le
style de la transformation. Avec la
valeur ease, nous programmons une
animation linéaire, sans accélération ni ralentissement.
Il est maintenant temps de tester le résultat d'un
code Javascript on ne peut plus épuré.
- Enregistrer les modifications (CTRL + S) et basculer sur le navigateur (ALT + Tab),
- Rafraîchir la page avec la touche F5 du clavier,
- Dans la première zone, choisir une durée de 5 secondes avec la première liste déroulante,
- Puis, dans la seconde zone, choisir un délai d'une seconde,
- Dès lors cliquer sur le bouton Modifier et passer la souris sur le carré,
Comme vous pouvez l'apprécier, le carré se transforme bien en un cercle mais en respectant le
délai et la
durée définis dynamiquement par le
code Javascript.
Le
code Javascript que nous avons bâti pour influer sur ces
propriétés Css est trivial :
function modifProp()
{
var laDuree, leDelai, leCercle;
laDuree = document.getElementById("duree").value + "s";
leDelai = document.getElementById("delai").value + "s";
leCercle = document.getElementById("cercle");
leCercle.style.transitionDuration = laDuree;
leCercle.style.transitionDelay = leDelai;
leCercle.style.transitionTimingFunction = "ease";
}