2.3 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,
el.style.top = "";
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à.
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é");
});
}
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.
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);
}
}
Tous ces points sont dans le fichier javascript inclus dans la page à partir de là. 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]({{< relref transition-4 >}})
{{< html_preview >}}