文章出處
文章列表
前面的話
與CSS過渡不同,JS過渡主要通過事件進行觸發。本文將詳細介紹Vue過渡效果之JS過渡
事件鉤子
JS過渡主要通過事件監聽事件鉤子來觸發過渡,共包括如下的事件鉤子
<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" > <!-- ... --> </transition>
下面各個方法中,函數中的參數el表示要過渡的元素,可以設置不同情況下,el的位置、顏色等來控制其動畫的改變
// ...
methods: {
// --------
// 進入中
// --------
beforeEnter: function (el) {
// ...
},
// 此回調函數是可選項的設置
// 與 CSS 結合時使用
enter: function (el, done) {
// ...
done()
},
afterEnter: function (el) {
// ...
},
enterCancelled: function (el) {
// ...
},
// --------
// 離開時
// --------
beforeLeave: function (el) {
// ...
},
// 此回調函數是可選項的設置
// 與 CSS 結合時使用
leave: function (el, done) {
// ...
done()
},
afterLeave: function (el) {
// ...
},
// leaveCancelled 只用于 v-show 中
leaveCancelled: function (el) {
// ...
}
}
上面方法中,有兩個方法比較特殊,是enter()和leave()方法,它們接受了第二個參數done。當進入完畢或離開完畢后,會調用done()方法來進行接下來的操作
[注意]對于僅使用JS過渡的元素添加 v-bind:css="false"
,Vue 會跳過 CSS 的檢測。這也可以避免過渡過程中 CSS 的影響
【簡單事例】
下面是一個JS過渡的簡單事例
<div id="demo"> <button @click="show = !show">Toggle</button> <transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:leave="leave" :css="false"> <p v-if="show">Demo</p> </transition> </div>
<script> new Vue({ el: '#demo', data: { show: false }, methods: { beforeEnter: function (el) { el.style.opacity = 0 el.style.transformOrigin = 'left' }, enter: function (el, done) { Velocity(el, { opacity: 1, fontSize: '1.4em' }, { duration: 300 }) Velocity(el, { fontSize: '1em' }, { complete: done }) }, leave: function (el, done) { Velocity(el, { translateX: '15px', rotateZ: '50deg' }, { duration: 600 }) Velocity(el, { rotateZ: '100deg' }, { loop: 2 }) Velocity(el, {rotateZ: '45deg',translateY: '30px',translateX: '30px',opacity: 0}, {complete: done }) } } }) </script>
初始渲染過渡
可以通過 appear
特性設置節點的在初始渲染的過渡,自定義 JavaScript 鉤子
<transition appear v-on:before-appear="customBeforeAppearHook" v-on:appear="customAppearHook" v-on:after-appear="customAfterAppearHook" v-on:appear-cancelled="customAppearCancelledHook" > <!-- ... --> </transition>
下面是一個例子
<div id="demo"> <button @click="reset">還原</button> <transition appear :appear="customAppearHook"> <p>小火柴的藍色理想</p> </transition> </div>
<script> new Vue({ el: '#demo', methods:{ reset(){ history.go(); }, customAppearHook(el, done) { Velocity(el, {backgroundColor:"#ddd",translateX:200}); Velocity(el,"reverse",{complete:done}) }, } }) </script>
文章列表
全站熱搜