transition标签
是Vue的内置动画标签,在插入/更新/移除DOM元素时,在合适的时候给元素添加样式类名(配合css样式使用,实现动画效果)
注意:
 1.transition标签只能包含一个元素;如果里面写了多个元素,则只生效第一个。
 2.transition包裹的标签需要设置v-show/v-if属性控制元素的显示
动画css样式对应的类名
进入:.v-enter始状态、.v-enter-to末状态、.v-enter-active进入动画(vue2)
 离开:.v-leave始状态、.v-leave-to末状态、.v-leave-active离开动画(vue2)
 进入:.v-enter-form始状态、.v-enter-to末状态、.v-enter-active进入动画(vue3)
 离开:.v-leave-form始状态、.v-leave-to末状态、.v-leave-active离开动画(vue3)
 
配合animation
效果:按钮点击时 h1渐隐渐显
<template>
    <div>
        <button @click="showTra = !showTra">隐藏/显示</button>
        <!-- Vue 的内置动画标签 transition -->
        <transition>
            <!-- 只能包含 1 个元素 -->
            <h1 v-show="showTra">组件动画效果</h1>
            <!-- 需要设置 v-show / v-if 属性控制元素的显示 -->
        </transition>
    </div>
</template>
<script>
export default {
    name: "App",
    data() {
        return { showTra: true };
    },
};
</script>
<style>
//transition没有设置name属性  所以动画类名为 v-xxx
.v-enter-active {
  animation: move 2s;
 }
 .v-leave-active {
     animation: move 2s reverse;
 }
 @keyframes move {
     from {
         opacity: 0;
     }
     to {
         opacity: 1;
     }
 }
</style>
transition标签属性
name属性:用于自动生成css动画类名
 如果transition标签元素没有设置那么属性,则对应的动画类名为v-xxx
 如果设置了name属性,则对应的动画类名为 属性值-xxx
 appear 属性:一开始就生效显示动画
当存在多个 tansition 标签时,我们可以通过 name 属性给各个 transition 标签指定不同的 CSS 动画效果
<template>
    <div>
        <button @click="showTra = !showTra">隐藏/显示</button>
        <!-- Vue 的内置动画标签 transition -->
        <transition name="move1">
            <!-- 只能包含 1 个元素 -->
            <h1 v-show="showTra">组件动画效果</h1>
            <!-- 需要设置 v-show / v-if 属性控制元素的显示 -->
        </transition>
        <transition name="move2">
            <!-- 只能包含 1 个元素 -->
            <h1 v-show="showTra">组件动画效果</h1>
            <!-- 需要设置 v-show / v-if 属性控制元素的显示 -->
        </transition>
    </div>
</template>
<script>
export default {
    name: "App",
    data() {
        return { showTra: true };
    },
};
</script>
<style>
//transition没有设置name属性  所以动画类名为 v-xxx
.move1-enter-active {
  animation: move 2s;
 }
 .move1-leave-active {
     animation: move 2s reverse;
 }
.move2-enter-active {
  animation: move 4s;
 }
 .move2-leave-active {
     animation: move 4s reverse;
 }
 @keyframes move {
     from {
         opacity: 0;
     }
     to {
         opacity: 1;
     }
 }
</style>
transition-group标签
transition标签只能包含一个元素、transition-group标签可以包含多个元素
 transition-group标签里面的元素需要设置key属性,作为当前元素的唯一标识
<template>
    <div>
        <button @click="showTra = !showTra">隐藏/显示</button>
        <transition-group apper>
            <h1 v-if="showTra" key="ceshi">组件动画效果</h1>
            <h1 v-if="!showTra" key="ceshi1">组件动画效果1</h1>
        </transition>
    </div>
</template>
<script>
export default {
    name: "App",
    data() {
        return { showTra: true };
    },
};
</script>
<style>
h1 {
    transition: 0.5s;
    position: absolute;
}
.v-leave {
    opacity: 1;
}
.v-leave-to {
    opacity: 0;
}
.v-enter {
    opacity: 0;
}
.v-enter-to {
    opacity: 1;
}
</style>
如果只有两个元素,也可以给一个元素的key设置不同的状态来代替v-if和v-else,上面的例子可以重写为
<template>
    <div>
        <button @click="showTra = !showTra">隐藏/显示</button>
        <transition-group apper>
            <h1 :key="showTra">{{ isEditing ? "组件动画效果" : "组件动画效果1" }}</h1>
        </transition>
    </div>
</template>



















