您好,登錄后才能下訂單哦!
如何實現(xiàn)Vue路由切換時的左滑和右滑效果,因為原作者ustbhuangyi老師的兩個慕課項目中都沒有這樣的效果,于是突發(fā)奇想要做這個功能,看了看QQ、微信都沒這樣的效果,最后發(fā)現(xiàn)SegmentFault(思否) 和掘金兩個app都有這樣的效果,就以此為參考開始做了。
transition
首先看看官網(wǎng) 淡入淡出動畫的例子:
<div id="demo"> <button v-on:click="show = !show"> Toggle </button> <transition name="fade"> <p v-if="show">hello</p> </transition> </div>
new Vue({ el: '#demo', data: { show: true } })
.fade-enter-active, .fade-leave-active { transition: opacity .5s; } .fade-enter, .fade-leave-to { opacity: 0; }
左右切換效果
CSS部分
我們要實現(xiàn)的是左右切換的效果,所以要定義兩種動畫(左滑和右滑)
.transitionBody{ transition: all 0.15s ease; /*定義動畫的時間和過渡效果*/ } .transitionLeft-enter, .transitionRight-leave-active { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); /*當左滑進入右滑進入過渡動畫*/ } .transitionLeft-leave-active, .transitionRight-enter { -webkit-transform: translate(-100%, 0); transform: translate(-100%, 0); }
HTML部分
這里的 keep-alive 是Vue的內(nèi)置組件,能在組件切換過程中將狀態(tài)保留在內(nèi)存中,防止重復(fù)渲染DOM,我們要把它也包裹在transition標簽內(nèi),否則頁面將重新渲染,切換的動畫也會卡頓
<transition :name="transitionName"> <keep-alive> <router-view class="transitionBody"></router-view> </keep-alive> </transition>
JS部分
在Vue組件中,data必須是一個函數(shù),將對象 {transitionName: ‘transitionLeft'} 掛載到Vue實例中,然后我們可以監(jiān)聽路由的 to 和 from 來判斷此時應(yīng)該左滑還是右滑,來動態(tài)切換transition的name值。
export default { data() { return { transitionName: 'transitionLeft' }; }, watch: { '$route' (to, from) { const arr = ['/goods','/ratings','/seller']; const compare = arr.indexOf(to.path)>arr.indexOf(from.path); this.transitionName = compare ? 'transitionLeft' : 'transitionRight'; } } }
點擊鏈接體驗一下: https://zc95.github.io/demo/vue-sell
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。