使用vue-router切換頁(yè)面時(shí)實(shí)現(xiàn)設(shè)置過渡動(dòng)畫
背景
今天在編寫頁(yè)面時(shí),看到頁(yè)面沒有任何效果就只是直入直出,完全沒有一點(diǎn)逼格,所以想要實(shí)現(xiàn)類似于原生app的那種切換頁(yè)面時(shí)的特效,遂開始google,發(fā)現(xiàn)網(wǎng)上各種方案都是各有優(yōu)缺點(diǎn),于是整理了自認(rèn)為優(yōu)雅的方案并記錄下來(lái).
實(shí)現(xiàn)難點(diǎn)
如何判斷切換路由時(shí)是前進(jìn)還是后退
每次切換時(shí)向左向右切換動(dòng)畫如何實(shí)現(xiàn)
解決方案
我們需要給各個(gè)頁(yè)面定義層級(jí),在切換路由時(shí)判斷用戶是進(jìn)入哪一層頁(yè)面,如果用戶進(jìn)入更高層級(jí)那么做前進(jìn)動(dòng)畫,如果用戶退到低層級(jí)那么做后退動(dòng)畫.
router/index.js
import VueRouter from 'vue-router'
import Home from '../components/home/home'
import User from '../components/user/user'
var router = new VueRouter({
routes:[{
name:'test',
path:'/',
meta:{index:0},//meta對(duì)象的index用來(lái)定義當(dāng)前路由的層級(jí),由小到大,由低到高
component:{
template:'<div>test</div>'
}
},{
name:'home',
path:'/home',
meta:{index:1},
component:Home
},{
name:'user',
path:'/user/:id',
meta:{index:2},
component:User
}]
});
監(jiān)控路由跳轉(zhuǎn),判斷切換頁(yè)面之間的層級(jí)關(guān)系,并以此來(lái)判斷路由前進(jìn)或者后退.
<template>
<div id="app">
<transition :name="transitionName">
<router-view></router-view>
</transition>
</div>
</template>
<script>
export default {
name: 'App',
data(){
return {
transitionName:''
}
},
watch: {//使用watch 監(jiān)聽$router的變化
$route(to, from) {
//如果to索引大于from索引,判斷為前進(jìn)狀態(tài),反之則為后退狀態(tài)
if(to.meta.index > from.meta.index){
//設(shè)置動(dòng)畫名稱
this.transitionName = 'slide-left';
}else{
this.transitionName = 'slide-right';
}
}
}
}
</script>
編寫slide-left 和 slide-right 類的動(dòng)畫
.slide-right-enter-active,
.slide-right-leave-active,
.slide-left-enter-active,
.slide-left-leave-active {
will-change: transform;
transition: all 500ms;
position: absolute;
}
.slide-right-enter {
opacity: 0;
transform: translate3d(-100%, 0, 0);
}
.slide-right-leave-active {
opacity: 0;
transform: translate3d(100%, 0, 0);
}
.slide-left-enter {
opacity: 0;
transform: translate3d(100%, 0, 0);
}
.slide-left-leave-active {
opacity: 0;
transform: translate3d(-100%, 0, 0);
}
示例
CSDN markdown 禁用了iframe, 有翻墻工具的可以點(diǎn)擊codesandbox demo.
以上這篇使用vue-router切換頁(yè)面時(shí)實(shí)現(xiàn)設(shè)置過渡動(dòng)畫就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
用vuex寫了一個(gè)購(gòu)物車H5頁(yè)面的示例代碼
本篇文章主要介紹了用vuex寫了一個(gè)購(gòu)物車H5頁(yè)面的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
淺談vue獲得后臺(tái)數(shù)據(jù)無(wú)法顯示到table上面的坑
這篇文章主要介紹了淺談vue獲得后臺(tái)數(shù)據(jù)無(wú)法顯示到table上面的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-08-08
VUE2.0 ElementUI2.0表格el-table自適應(yīng)高度的實(shí)現(xiàn)方法
在開發(fā)中,需要表格控件根據(jù)瀏覽器高度進(jìn)行調(diào)整,固定表頭,本文主要介紹了VUE2.0 ElementUI2.0表格el-table自適應(yīng)高度的實(shí)現(xiàn)方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-11-11
vue實(shí)現(xiàn)網(wǎng)易云音樂純界面
這篇文章主要為大家介紹了vue實(shí)現(xiàn)網(wǎng)易云音樂純界面過程詳解,附含詳細(xì)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
el-date-picker日期選擇限制范圍的實(shí)例代碼
這篇文章主要介紹了el-date-picker日期選擇限制范圍,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
深入淺析Vue.js中 computed和methods不同機(jī)制
這篇文章給大家介紹了Vue.js中 computed和methods不同機(jī)制,在vue.js中,methods和computed兩種方式來(lái)動(dòng)態(tài)當(dāng)作方法使用,文中還給大家提到了computed和methods的區(qū)別,感興趣的朋友一起看看吧2018-03-03

