[CSS-JS]Animation CSS simple

NoSmoking

Structure HTML de base

<div class="cadre">
  <img src="//club.developpez.com/webdesign/Rubriques/Web/CSS/logo_outils_css.gif" alt="">
</div> 

Animation au survol

L'animation consiste à faire apparaître l'image au survol de l'élément conteneur puis à faire disparaître celle-ci lorsque l'on quitte la zone.

L'animation est géré par le CSS grâce à l'utilisation du sélecteur #cadre:hover img et l'utilisation de la propriété transition affectée à l'image.

.cadre img {
  position: absolute;
  right: -100%;
  transition: all .5s;
}
.cadre:hover img {
  right: 0;
}

Animation sur action

L'animation consiste à faire apparaître l'image sur une action, ici appui sur un élément <button>, puis à la faire disparaître sur une autre action, ici un nouvel appui sur le même élément <button>.

L'animation est déclenchée en ajoutant/supprimant une classe à l'image, ceci est géré en JavaScript en utilisant la méthode element.classList.toggle().

// ajout/suppression de la class au click
oBtn.addEventListener('click', function (e) {
  oImg.classList.toggle('visible');
});

L'animation proprement dite est gérée par le CSS.

.cadre img.visible {
  right: 0;
}

Animation va et vient sur action

L'animation consiste à faire apparaître puis disparaître l'image sur une action, ici appui sur un élément <button>.

L'animation est déclenchée en ajoutant une classe à l'image, ceci est géré en JavaScript en utilisant la méthode element.classList.add() puis en la supprimant en fin d'animation.

// ajout de la class au click
oBtn.addEventListener('click', function (e) {
  oImg.classList.add('show-hide');
});

La suppression en fin d'animation se fait en plaçant un écouteur animationend sur l'image, et en utilisant la méthode element.classList.remove().

// supprime la class en fin d'animation
oImg.addEventListener('animationend', function(e){
  this.classList.remove('show-hide');
});

L'animation proprement dite est gérée par le CSS en utilisant la propriété animation et une règle @keyframes.

.cadre img.show-hide {
  animation: show-hide 1s linear;
}
@keyframes show-hide {
  0% {
    right: -100%;
  }
  40% {
    right: 0;
  }
  60% {
    right: 0;
  }
  100% {
    right: -100%;
  }
}