wanderings/content/posts/transition-3.md

2.4 KiB

+++ title = "transitions III - css" date = 2020-04-13

layout: code

+++

On a la possibilité de donner des réglages par défaut à nos transitions en css ; ça permet d'alléger le javascript, et de contrôler les paramètres de la transition depuis le css.

Ici move_into(el, destEl) va utiliser une classe qui durera le temps de la transition, qui s'appelera transition-deplacement. On pourra y stocker des valeurs par défaut pour la transition. Par exemple,

{% highlight js %} el.style.top = ""; {% endhighlight %}

donnera à l'élément el la valeur top décrite dans le css. Comme el appartient à la classe transition-deplacement qui dit que top = 0; eh ben voilà.

{% highlight js %} function move_into(el, destEl) { if(el.classList.contains('transition-deplacement')) { console.log('! already movin'); } else { el.classList.add('transition-deplacement');

// Do the job

el.addEventListener('transitionend', function declasse() {
  el.removeEventListener('transitionend', declasse);
  el.classList.remove('transition-deplacement');
  console.log("élément", el, "déclassé");
});

} {% endhighlight %}

Pour finir, toggle(el, destEl) utilisera une autre classe pour déterminer si el a déjà été ouvert, la classe ouvert. Si oui, il le mettra dans le parent direct de destEl.

Dans ce cas, on n'utilise même pas cette classe dans le css. Elle ne sert qu'à javascript.

{% highlight js %} function toggle(el, destEl) { if(el.classList.contains('ouvert')) { el.classList.remove('ouvert'); move_into(el, destEl.parentElement); } else { el.classList.add('ouvert'); move_into(el, destEl); } } {% endhighlight %}

Tous ces points sont dans le fichier javascript inclus dans la page à partir de [là]({% link html/transition-3.js %}). Et maintenant le html et la prévisualisation :

<style>
  .transition-deplacement {
    position: relative;
    transition: 1s;
    left: 0;
    top: 0;
  }
.min {
  display: inline-block;
  width: 10em;
  height: 5em;
}
</style>
<div>
  <button onclick="toggle(fleche, cible)">
    bouger le div 1
  </button>
  <div id="cible" class="min">
    texte de la cible
  </div>
  <div class="min">
    un div pour prendre un peu de place
  </div>
  <div id="fleche" class="min">
    texte de la flèche
  </div>
</div>

[la suite]({% post_url html/2020-04-13-transition-4 %})