三、JavaScript 钩子
1,根本介绍
咱们能够在 transition 属性中申明 JavaScript
钩子,这些钩子函数能够联合 CSS transitions/animations
应用,也能够独自应用。
留神:
当只用 JavaScript 过渡时,在 enter 和 leave 中必须应用 done 进行回调。否则,它们将被同步调用,过渡会立刻实现。
举荐对于仅应用 JavaScript 过渡的元素增加 v-bind:css="false",Vue 会跳过 CSS 的检测。这也能够防止过渡过程中 CSS 的影响。
<template>
<div id="app">
<button @click="show = !show">显示/暗藏</button>
<br>
<transition
v-on:before-enter="beforeEnter"
v-on:enter="enter"
v-on:after-enter="afterEnter"
v-on:enter-cancelled="enterCancelled"
v-on:before-leave="beforeLeave"
v-on:leave="leave"
v-on:after-leave="afterLeave"
v-on:leave-cancelled="leaveCancelled">
<img v-show="show" src="./assets/logo.png">
</transition>
</div>
</template>
<script>
export default {
name: 'App',
data: function(){
return {
show: true
}
},
methods: {
// --------
// 过渡进入中
// --------
// 设置过渡进入之前的组件状态
beforeEnter: function (el) {
// ...
},
// 设置过渡进入实现时的组件状态
enter: function (el, done) {
// ...
done()
},
// 设置过渡进入实现之后的组件状态
afterEnter: function (el) {
// ...
},
enterCancelled: function (el) {
// ...
},
// --------
// 过渡来到时
// --------
// 设置过渡来到之前的组件状态
beforeLeave: function (el) {
// ...
},
// 设置过渡来到实现时地组件状态
leave: function (el, done) {
// ...
done()
},
// 设置过渡来到实现之后的组件状态
afterLeave: function (el) {
// ...
},
// leaveCancelled 只用于 v-show 中
leaveCancelled: function (el) {
// ...
}
}
}
</script>
2,应用样例
(1)效果图
- 通过点击按钮对下方图片进行显示或暗藏(交替)。
- 图片在显示或暗藏的过程中,会有淡入淡出的成果。只不过这个成果不再是通过
CSS
实现,而是在钩子函数中借助Velocity.js
来实现。
(2)样例代码
Velocity 库能够在我的项目中运行如下命令进行装置:
npm install velocity-animate --save-dev
<template>
<div id="app">
<button @click="show = !show">显示/暗藏</button>
<br>
<transition
v-on:before-enter="beforeEnter"
v-on:enter="enter"
v-on:leave="leave"
v-bind:css="false">
<img v-show="show" src="./assets/logo.png">
</transition>
</div>
</template>
<script>
import Velocity from 'velocity-animate'
export default {
name: 'App',
data: function(){
return {
show: true
}
},
methods: {
beforeEnter: function (el) {
el.style.opacity = 0
},
enter: function (el, done) {
Velocity(el, {
rotateZ: '0deg',
translateY: '0px',
translateX: '0px',
opacity: 1
}, { complete: done })
},
leave: function (el, done) {
Velocity(el, {
rotateZ: '45deg',
translateY: '30px',
translateX: '30px',
opacity: 0
}, { complete: done })
}
}
}
</script>
附:初始渲染的过渡
对于初始渲染的过渡,同样有提供相应的钩子函数。咱们能够在这些钩子函数中实现相应的动画。
<transition
appear
v-on:before-appear="customBeforeAppearHook"
v-on:appear="customAppearHook"
v-on:after-appear="customAfterAppearHook"
v-on:appear-cancelled="customAppearCancelledHook"
>
<!-- ... -->
</transition>
发表回复