Animation

Avant, je veux dire avant la prochaine version 2.14 de Dotclear, on utilisait beaucoup de javascript et un peu de CSS pour faire varier le fond coloré de certains messages.

Donc il fallait une CSS :

.colorBeginMessage {
  color: #ccc;
}

.colorEndMessage {
  color: #676e78;
}

Puis un peu de Javascript :

…
$('.message').backgroundFade({sColor: dotclear.fadeColor.beginMessage, eColor: dotclear.fadeColor.endMessage, steps:20});
…

Avec entre les deux plein de code en javascript pour récupérer les couleurs en question — en créant des objets cachés pour chacune des couleurs et les stocker quelque part — puis ensuite en utilisant un plugin jQuery (/admin/js/jquery/jquery.bgFade.js) qu’il fallait charger et qui se chargeait de faire varier la couleur de fond de l’objet pointé en utilisant un certain nombre de pas.

Bref c’était compliqué !

Dans la 2.14 je suis passé à l’animation CSS 3, ce qui donne ceci, toujours pour un message (ayant la classe .message) :

.message {
  background: #676e78 url(msg-std.png) no-repeat 0.7em 0.7em;
  animation-name: kf-message;
  animation-duration: .5s;
}
@keyframes kf-message {
  0% {
    background-color: #ccc;
  }
  100% {
    background-color: #676e78;
  }
}

Et c’est tout !

Plus de javascript pour faire le job, c’est le navigateur qui gère ça uniquement avec la CSS ! Et donc plus de couleur à récupérer dans la CSS via un script javascript, plus de code à modifier pour modifier le nombre de pas vu qu’on est passé à une durée directement définie dans la CSS !

En détail le 0% correspond à l’état initial, le 100% à l’état final (vous pouvez rajouter des étapes intermédiaires si ça vous chante, par exemple avec un 50% { … }) et la durée (en seconde) égale pour les messages à une demi-seconde est suffisante lorsque l’état final est égal à l’état standard.

Si jamais vous vouliez faire un aller-retour, avec une valeur transitoire à mi-chemin, il sera sage de ralentir alors l’animation (j’utilise en général 1 seconde), comme par exemple avec la nouvelle classe .missing que j’ai ajouté pour indiquer un champ problématique :

.missing {
  background-color: inherit;
  animation-name: kf-missing;
  animation-duration: 1s;
}
@keyframes kf-missing {
  0% {
    background-color: inherit;
  }
  50% {
    background-color: #ffbaba;
  }
  100% {
    background-color: inherit;
  }
}

Classe que je mets en place en javascript de cette façon, quand c’est utile :

…
$(e).addClass('missing').focusout(function() {
  $(this).removeClass('missing');
});
e.focus();
…

Si jamais dans vos développement vous utilisiez le plugin jQuery cité plus haut, sachez qu’il disparaîtra dans la 2.14 à venir !

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/13661

Haut de page