过渡
Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果
工具:
1.在CSS
过渡和动画中自动应用class
2.可以配合使用第三方CSS
动画库,如Animate.css
3.在过渡钩子函数中使用JavaScript
直接操作DOM
4.可以配合使用第三方JavaScript
动画库,如Velocity.js
一、单元素/组件的过渡
动画触发的场景/给元素和组件添加进入/离开过渡:
1.条件渲染(使用v-if
,创建和销毁)
2.条件展示(使用v-show
,显示和隐藏)
3.动态组件(组件切换,组件的激活和冻结)
4.组件的根节点(加载)
二、CSS过渡
Vue
提供了transition
封装组件,在上述的几个场景中触发过渡,通过name
属性添加指定的前缀class
样式
三、过渡类名
在进入/离开的过渡中,会有6个class切换
如果在transition
中设置了name
,那么下面类名中的v
会被替换为name
的属性值
1.v-enter
定义进入过渡的开始状态
元素被插入前生效,元素被插入的下一帧失效
2.v-enter-active
定义进入过渡生效时的状态
元素被插入前生效,在过渡/动画完成后移除
用来定义进入过渡的过程时间,延迟和曲线函数
3.v-enter-to
2.1.8版及以上
定义进入过渡的结束状态
元素被插入的下一帧生效,过渡/动画完成后移除
4.v-leave
定义离开过渡的开始状态
在离开过渡被触发时立刻生效,下一帧被移除
5v-leave-active
定义离开过渡生效时的状态
离开过渡被触发时立刻生效,在过渡/动画完成后移除
用来定义离开过渡的过程时间,延迟和曲线函数
6.v-leave-to
2.1.8版及以上
定义离开过渡的结束状态
在离开过渡被处罚之后下一帧生效,在过渡/动画完成后移除
四、CSS动画
CSS 动画用法同 CSS 过渡,区别是在动画中 v-enter
类名在节点插入 DOM 后不会立即删除,而是在animationend
事件触发时删除
使用自定义动画@keyframes
时,transition
要换为animation
五、同时使用过渡和动画
Vue
为了知道过渡的完成,必须设置相应的事件监听器。它可以是 transitionend
或 animationend
,这取决于给元素应用的 CSS 规则。如果你使用其中任何一种,Vue
能自动识别类型并设置监听。
但是,在一些场景中,你需要给同一个元素同时设置两种过渡动效,比如 animation
很快的被触发并完成了,而 transition
效果还没结束。在这种情况中,你就需要使用type attribute
并设置 animation
或 transition
来明确声明你需要 Vue
监听的类型。
六、显性的过渡持续时间
默认情况下,vue
回等待其在过渡效果的根元素的第一个transitionend
或animationend
事件
使用transition
组件上duration
定制一个线性的过渡持续时间(ms):
<transition :duration="1000">···</transition>
也可以定制进入和移出的持续时间
<transition :duration="{enter:500,leave:800}">···</transition>
七、Javascript钩子
使用v-on
谁触发这些事件就会把该元素传入事件中
注意:
1.当只用 JavaScript 过渡的时候,在 enter 和 leave 中必须使用 done 进行回调。否则,它们将被同步调用,过渡会立即完成。
2.推荐对于仅使用 JavaScript 过渡的元素添加 v-bind:css=“false”,Vue 会跳过 CSS 的检测。这也可以避免过渡过程中 CSS 的影响。