概要
アニメーションを作るために便利なtransition
とtransition-group
についてメモ。
vue3では
v-enter・v-leave
がv-enter-from・v-leave-from
になっている。
v-enterでの状態についてだと、各名前は以下の状態に対応する。
- v-enter : 要素がレンダリングされる前
- v-enter-active : 要素がレンダリングされている途中
- v-enter-to : 要素がレンダリングされる後
v-enter-to
とかv-leave
は要素がレンダリングされてる状態のままでいいことが多いから、
指定されないことが多い。
/* vue-jsの公式ドキュメントのcss事例 */
/* `v-enter-to`とか`v-leave`は指定されてない。 */
.slide-fade-enter-active {
transition: all .3s ease;
}
.slide-fade-leave-active {
transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active below version 2.1.8 */ {
transform: translateX(10px);
opacity: 0;
}
気をつけるべきこと
tranisionとtransition-gruopの違い
transition
はv-if
とかv-show
に対して作用するもの。
transition-group
は連想配列の加減に対して作用するもの。
transition-group
でv-if
とかを囲んでも全く意味ないので注意。
v-bindのkey
v-bind:key
の指定をindex
にするとダメらしい。
transition-group
の上にv-if``v-show
をつける
下記のコードのように、あるテンプレート内でtransition-group
の上位にv-show
をつけると、transition-group
がうまく効かない可能性あり。別テンプレートに記載したらいけた。
<template>
<div v-if:"isShow"> <!-- ここでv-ifとかつけるとtransition-groupが効かなくなる -->
<transition-group name="todo">
<div v-for="(todo, index) in todos" v-bind:key="(todo.id)">
<Todo :todo="todo">
</transition-group>
</div>
</template>
参考記事