使用vue-router切換頁面時實現(xiàn)設(shè)置過渡動畫
背景
今天在編寫頁面時,看到頁面沒有任何效果就只是直入直出,所以想要實現(xiàn)類似于原生app的那種切換頁面時的特效,遂開始google,發(fā)現(xiàn)網(wǎng)上各種方案都是各有優(yōu)缺點,于是整理了自認為優(yōu)雅的方案并記錄下來.
實現(xiàn)難點
如何判斷切換路由時是前進還是后退
每次切換時向左向右切換動畫如何實現(xiàn)
解決方案
我們需要給各個頁面定義層級,在切換路由時判斷用戶是進入哪一層頁面,如果用戶進入更高層級那么做前進動畫,如果用戶退到低層級那么做后退動畫.
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對象的index用來定義當前路由的層級,由小到大,由低到高
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),判斷切換頁面之間的層級關(guā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索引,判斷為前進狀態(tài),反之則為后退狀態(tài)
if(to.meta.index > from.meta.index){
//設(shè)置動畫名稱
this.transitionName = 'slide-left';
}else{
this.transitionName = 'slide-right';
}
}
}
}
</script>
編寫slide-left 和 slide-right 類的動畫
.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);
}以上這篇使用vue-router切換頁面時實現(xiàn)設(shè)置過渡動畫就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實現(xiàn)echart餅圖legend顯示百分比的方法
本文主要介紹了vue實現(xiàn)echart餅圖legend顯示百分比的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
vue+element實現(xiàn)下拉菜單并帶本地搜索功能示例詳解
這篇文章主要介紹了vue+element實現(xiàn)下拉菜單并帶本地搜索功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
詳解如何在Vue Router中實現(xiàn)動態(tài)路由匹配
在構(gòu)建復(fù)雜的單頁面應(yīng)用程序(SPA)時,動態(tài)路由匹配是一項強大的功能,它允許我們根據(jù)URL中的參數(shù)動態(tài)加載內(nèi)容,Vue Router 提供了動態(tài)路由匹配的能力,使得我們可以根據(jù)不同的URL參數(shù)展示不同的組件或數(shù)據(jù),本文將介紹如何在Vue Router中實現(xiàn)動態(tài)路由匹配2025-05-05
vue el-tree 默認展開第一個節(jié)點的實現(xiàn)代碼
這篇文章主要介紹了vue el-tree 默認展開第一個節(jié)點的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
Vue.sync修飾符與$emit(update:xxx)詳解
這篇文章主要介紹了Vue.sync修飾符與$emit(update:xxx),實現(xiàn)思路非常簡單,文章介紹了.sync修飾符的作用和使用.sync修飾符的寫法,實現(xiàn)代碼簡單易懂對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11
vue等待數(shù)據(jù)渲染完成后執(zhí)行下一個方法問題
這篇文章主要介紹了vue等待數(shù)據(jù)渲染完成后執(zhí)行下一個方法問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12

