wanderings/content/posts/transition-3.md

91 lines
2.3 KiB
Markdown
Raw Normal View History

2020-10-08 23:07:35 +02:00
+++
title = "transitions III - css"
date = 2020-04-13
# layout: code
+++
2020-10-09 05:20:20 +02:00
<script src="/js/transition-3.js" type="text/javascript"></script>
2020-10-08 23:07:35 +02:00
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,
2020-10-09 05:20:20 +02:00
``` js
el.style.top = "";
```
2020-10-08 23:07:35 +02:00
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à.
2020-10-09 05:20:20 +02:00
``` js
2020-10-08 23:07:35 +02:00
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é");
});
}
2020-10-09 05:20:20 +02:00
```
2020-10-08 23:07:35 +02:00
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.
2020-10-09 05:20:20 +02:00
``` js
2020-10-08 23:07:35 +02:00
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);
}
}
2020-10-09 05:20:20 +02:00
```
2020-10-08 23:07:35 +02:00
Tous ces points sont dans le fichier javascript inclus dans la page à partir de
2020-10-09 05:20:20 +02:00
[](/js/transition-3.js). Et maintenant le html et la
2020-10-08 23:07:35 +02:00
prévisualisation :
``` html
<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>
```
2020-10-09 05:20:20 +02:00
[la suite]({{< relref transition-4 >}})
2020-10-08 23:07:35 +02:00