formateur informatique

Détecter la fin d'une animation en Javascript

Accueil  >  Technique  >  Javascript  >  Javascript Astuces  >  Détecter la fin d'une animation en Javascript
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Connaître la fin d'une animation en Javascript

Sur des interfaces de sites Web interagissant avec les utilisateurs, des petits effets d'animation de temporisation peuvent être proposés pour améliorer l'aspect ludique. Dans ces conditions, il est intéressant que le code Javascript soit en mesure de maîtriser ces effets. En détectant la fin du jeu d'une animation, il est ainsi capable d'enchaîner au millimètre de nouvelles étapes pour une expérience de navigation plus plaisante et plus professionnelle.

Détecter la fin d-une animation par transition Css en Javascript

Sur l'exemple illustré par la capture, lorsque l'utilisateur pointe sur la photo avec la souris, celle-ci s'agrandit sur un délai de quelques secondes. Cette animation est commanditée par les styles Css. Et lorsque l'image acquiert ses dimensions finales, donc lorsque l'animation est terminée, un message se déclenche dans un cadre situé au-dessus de la photo. Ce message indique que l'événement de la fin de l'animation a bien été intercepté. En conséquence, le code Javascript est en mesure d'enchaîner dans la foulée avec de nouvelles actions.

Sources de travail
Pour la découverte de cette technique Javascript, nous proposons de récupérer une page Html offrant déjà l'image avec le pouvoir de s'animer au survol, grâce à des styles Css prédéfinis. Nous découvrons le fichier de la page Web. Il est nommé index.htm. Ses ressources l'accompagnent dans les sous dossiers. On note par exemple la présence de la photo à élargir au survol de la souris, dans le sous dossier img.
  • Double cliquer sur le fichier index.htm pour l'ouvrir dans le navigateur Web par défaut,
  • Puis, pointer avec la souris sur l'image qui se propose au centre de l'interface,
Page Html avec photo animée et étirée en Javascript et CSS

La photo s'étire en effet jusqu'à atteindre la même largeur que celle du cadre situé juste au-dessus d'elle. Mais précisément dans ce cadre, le message ne change pas lorsque l'animation se termine. Fort logiquement, cet événement n'est pas encore géré à ce stade. C'est par le biais de cette astuce Javascript que nous allons découvrir la technique.
  • 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++,
  • Puis, faire défiler la page jusqu'à la fin du code,
...
<div id="auCentre">
<div style="width:600px; "id="info">
Survolez l'image pour démarrer l'animation.
</div><br />
<img id="photo" src="img/parc.jpg" onmouseover="detecter()">

</div>
...


La construction qui nous intéresse est embarquée dans un calque d'identifiant auCentre. Il héberge lui-même un autre calque : info et une image (balise img) : photo. Le calque héberge le texte. La balise img accueille la photo. Ce sont ces identifiants qui vont nous permettre de piloter ces éléments Html par le code Javascript pour créer l'écouteur d'événement et ainsi changer l'information textuelle à l'issue de l'animation. Mais ces identifiants sont aussi exploités par le Css pour conférer des réglages à ces objets. Enfin, vous notez qu'un gestionnaire d'événement est en place sur l'image (onmouseover="detecter()"). Il appelle la fonction detecter lorsque la souris survole la photo. Et cette fonction est d'ores et déjà présente dans la section de script à la toute fin du code Html. Mais naturellement, elle est encore vide à ce stade.
  • Remonter tout en haut du code de la page Html,
...
<style>
#photo
{
cursor: pointer;
width: 300px;
height: 169px;
background-color: #666;
padding: 2px;
transition: all 3s;
}

#photo:hover
{
width: 600px;
height: 338px;
}
</style>
...


Dans le style photo d'origine, des attributs classiques sont réglés, notamment pour les dimensions. Néanmoins, un attribut est particulièrement important. Il s'agit de l'attribut transition. Il indique que si une transformation est entreprise, celle-ci doit concerner toutes les propriétés (all) et se jouer sur 3 secondes. C'est alors ce même nom de style mais cette fois associé au gestionnaire hover qui intervient. Il grossit les dimensions (width et height) au survol de la souris (hover) sur l'élément de la photo associé à ce style photo. Certes, nous n'engageons pas des transformations sur toutes les propriétés, mais c'est par fainéantise que nous avons passé l'attribut all plutôt que de lister chaque propriété à régler dans l'attribut transition, comme nous l'avions appris avec les astuces Css.

L'écouteur d'événement
Il est temps maintenant de découvrir une méthode Javascript très particulière et qui peut être associée à tout élément Html. Elle se nomme addEventListener. En fonction de la valeur qui lui est passée en premier paramètre, elle va être capable de détecter un événement particulier se déclenchant sur l'objet associé. Dès lors, sous forme de fonction, elle permet d'engager des actions en second paramètre. Dans notre cas, il s'agit simplement d'indiquer que la fin de l'animation a été détectée pour ouvrir la voie à de nouvelles transactions.
  • Dans les bornes de la fonction detecter, ajouter l'instruction Javascript suivante :
function detecter()
{
document.getElementById("info").innerText = "L'animation est en cours...";
}


Avant de paramétrer l'écouteur, nous songeons à initialiser le traitement. Nous adaptons simplement l'indication dans le calque info. En effet, si la fonction est appelée, cela signifie que l'animation a démarré. Comme vous le savez, c'est la méthode getElementById de l'objet Javascript document qui permet de pointer sur un élément Html en fonction de son identifiant passé en paramètre. Dès lors, nous pouvons exploiter sa propriété innerText pour écrire à l'intérieur du calque.

Si vous enregistrez les modifications, que vous actualisez le navigateur et que vous survolez la photo, vous constatez que l'information contextuelle se met bien à jour au-dessus de l'animation.

Animation en cours sur événement Javascript

Maintenant, il est temps d'initialiser l'observateur d'événements.
  • A la suite de la fonction, créer le gestionnaire suivant :
function detecter()
{
document.getElementById("info").innerText = "L'animation est en cours...";
photo.addEventListener('transitionend', function()
{

});

}


Nous l'avions annoncé, c'est la méthode addEventListener appliquée sur un élément Html, en l'occurrence ici sur la balise de l'image, qui permet d'observer ce qui se trame sur cette dernière. Et son attention s'adapte en fonction du renseignement fourni en premier paramètre. Avec la valeur transitionend, c'est la fin de l'animation régulée par l'attribut Css transition qui est observée. Et lorsque l'événement est intercepté, c'est le code de la fonction passée en second paramètre qui est exécuté.

Remarque par rapport à ce Listener : Nous pouvons l'exploiter avec de nombreux paramètres pour intercepter de nombreux événements. Par exemple, pour les gros sites Web professionnels, il est souvent utilisé avec la valeur DOMContentLoaded en premier argument. Lorsque l'événement écouté est géré, il stipule que tous les objets de la page sont complétement chargés. Il s'agit d'un bon moyen de différer le chargement d'éléments tierces, plus lourds ou moins réactifs. Ainsi, le contenu est directement disponible pour l'internaute et les chargements annexes ne nuisent pas à la qualité de la navigation.

Maintenant, lorsque la fin de l'animation est observée, nous devons simplement en avertir l'internaute, toujours par le biais d'une indication dans le calque d'identifiant info.
  • Dans les bornes de la fonction, ajouter l'instruction Javascript suivante :
function detecter()
{
document.getElementById("info").innerText = "L'animation est en cours...";
photo.addEventListener('transitionend', function()
{
document.getElementById("info").innerHTML = "L'animation est terminée... <span style='color:#2b579a; font-weight:bold;'>D'autres actions peuvent être enclenchées.</span>";
});
}


Cette fois, c'est la propriété innerHTML du calque que nous exploitons en lieu et place de sa propriété innerText. De cette manière, nous glissons des informations mises en forme grâce à des balises et attributs Html.
  • Enregistrer les modifications (CTRL + S) et basculer sur le navigateur Web (ALT + Tab),
  • Rafraîchir la page Html avec la touche F5 du clavier,
  • Puis, passer la souris sur la photo et attendre la fin de l'animation,
Détecter fin événement en Javascript, addEventListener

Comme vous pouvez le voir, dès que la transition est terminée, l'événement est intercepté stipulant que l'animation a fini de se jouer. Dès lors, à la suite du code de la fonction, nous pourrions entreprendre d'autres traitements qui permettraient d'enchaîner les actions après avoir respecté la temporisation souhaitée.

Remarque : Pour que les indications réagissent de la même façon pour l'animation inverse, soit lorsque la souris quitte la zone d'influence de l'image, il suffit d'ajouter le gestionnaire suivant dans la balise de la photo : onmouseleave = "detecter()".

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn