官网原文说明的可以添加<transition>的情况:
在下列情形中,可以给任何元素和组件添加进入/离开过渡
- 条件渲染 (使用
v-if
)- 条件展示 (使用
v-show
)- 动态组件
- 组件根节点
这里用v-show+opacity说明
v-show接收一个布尔值,表示为 不显示(false) 或 显示(true):
从 不显示(false) 到 显示(true)的过程:就是进入过渡的阶段。它有三个状态(生命周期):
v-enter
:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。
v-enter-active
:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
v-enter-to
:2.1.8 版及以上定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时v-enter
被移除),在过渡/动画完成之后移除。
我的理解:
v-enter:过渡执行之前的样子 opacity: 0;隐藏
v-enter-active:执行过渡的变化过程 隐藏0 --> 显示1 设置过渡时间曲线等
v-enter-to:过渡执行结束后的样子 opacity: 1;显示
从 显示(true) 到 不显示(false) 的过程:就是离开过渡的阶段。它有三个状态(生命周期):
v-leave
:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。
v-leave-active
:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。
v-leave-to
:2.1.8 版及以上定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时v-leave
被删除),在过渡/动画完成之后移除。
我的理解:
v-leave:过渡执行之前的样子 opacity: 1;显示
v-leave-active:执行过渡的变化过程 显示1 --> 隐藏0 设置过渡时间曲线等
v-leave-to:过渡执行结束后的样子 opacity: 0;隐藏
事实上,transition的JavaScript钩子名称我觉得更清晰
<transition
v-on:before-enter="beforeEnter"
v-on:enter="enter"
v-on:after-enter="afterEnter"
v-on:before-leave="beforeLeave"
v-on:leave="leave"
v-on:after-leave="afterLeave"
> </transition>
ps:Vue3.0已经把v-enter,v-leave改为v-enter-from,v-leave-from