vue router自動(dòng)判斷左右翻頁(yè)轉(zhuǎn)場(chǎng)動(dòng)畫效果
前段時(shí)間做了一個(gè)移動(dòng)端spa項(xiàng)目,技術(shù)基于 :vue + vue-router + vuex + mint-ui
因?yàn)槭褂昧藇ue-cli腳手架的webpack模版,所有頁(yè)面都以.vue為后綴的文件作為一個(gè)組件
最近公司項(xiàng)目比較少終于有空來(lái)記錄一下自己對(duì)vue-router的一些小小的使用心得,
一般的移動(dòng)端口單頁(yè)應(yīng)用在跳轉(zhuǎn)頁(yè)面時(shí)候會(huì)有相應(yīng)的轉(zhuǎn)場(chǎng)動(dòng)畫,比如:
1. 從當(dāng)前一級(jí)頁(yè)面跳轉(zhuǎn)二級(jí)頁(yè)面需要展示的轉(zhuǎn)場(chǎng)動(dòng)畫是一級(jí)頁(yè)面向屏幕左邊移動(dòng)消失的同時(shí),
二級(jí)頁(yè)面從屏幕的右邊向左邊移動(dòng)出現(xiàn)。(類似翻書翻到下一頁(yè)的效果)
2. 從當(dāng)前二級(jí)頁(yè)面跳回一級(jí)頁(yè)面需要展示的轉(zhuǎn)場(chǎng)動(dòng)畫是二級(jí)頁(yè)面向屏幕右邊移動(dòng)消失的同時(shí),
一級(jí)頁(yè)面從屏幕的左邊向右邊移動(dòng)出現(xiàn)。類似(翻書翻回到上一頁(yè)的效果)
但是出現(xiàn)了一個(gè)問(wèn)題:如何判斷當(dāng)前頁(yè)面和將要跳轉(zhuǎn)頁(yè)面之間的層級(jí)關(guān)系呢?
我的解決辦法是:創(chuàng)建頁(yè)面 (組件)時(shí),在定義頁(yè)面的router里通過(guò)設(shè)置頁(yè)面的path(訪問(wèn)路徑 )屬性來(lái)區(qū)分組件之間的層級(jí)關(guān)系。
比如一個(gè)一級(jí)頁(yè)面 (組件) ‘A' 的訪問(wèn)路徑為 ‘/A' 。他的二級(jí)頁(yè)面 ‘B' 的訪問(wèn)路徑為 ‘/A/B' .
那么在跳轉(zhuǎn)頁(yè)面之前,只需要比較當(dāng)前頁(yè)面和將要跳轉(zhuǎn)到的頁(yè)面的路徑深度就可以動(dòng)態(tài)設(shè)置轉(zhuǎn)場(chǎng)動(dòng)畫了。
比如 ‘/A/B'的深度 > ‘/A' 的深度那么 從B頁(yè)面跳轉(zhuǎn)到A頁(yè)面就應(yīng)該是 效果2:(翻書翻回到上一頁(yè)的效果).
一 。首先父頁(yè)面
home.vue:
<!-- keepAlList是用來(lái)動(dòng)態(tài)判斷組件是否需要keep-alive,建議保存到vuex中作為全局變量,至于下方的css動(dòng)畫,看官可以按照喜好自由修改-->
<transition :name="transNa">
<keep-alive :include="keepAlList">
<router-view class="child-view"></router-view>
</keep-alive>
</transition>
<style scoped>
.child-view {
position: absolute;
width: 100%;
height: 100%;
transition: all .5s ease;
-webkit-transition: all .5s ease;
-moz-transition: all .5s ease;
}
.rightin-enter,
.leftin-leave-active {
opacity: 0;
transform: translate3d(50% 0, 0);
-webkit-transform: translate3d(50%, 0, 0);
-moz-transform: translate3d(50%, 0, 0);
}
.leftin-enter,
.rightin-leave-active {
opacity: 0;
transform: translate3d(-50% 0, 0);
-webkit-transform: translate3d(-50%, 0, 0);
-moz-transform: translate3d(-50%, 0, 0);
}
</style>
二 。其次附上我的main.js片段(用來(lái)在跳轉(zhuǎn)頁(yè)面之前動(dòng)態(tài)設(shè)置轉(zhuǎn)場(chǎng)動(dòng)畫)
main.js:
//進(jìn)入路由之前設(shè)置攔截器
let noLoginList = ["login", "register", "forget", "home", "classify", "goodsDetial"];
router.routeInfo.beforeEach((to, from, next) => {
let user = sessionStorage.getItem('user');
//如果要去登錄頁(yè)面
if (noLoginList.indexOf(to.name) >= 0) {
if (!user || user == '') {
//未登錄的狀態(tài)通行
next();
return;
} else {
if (["login", "register", "forget"].indexOf(to.name) >= 0) {
//已登錄的狀態(tài)去首頁(yè)
next({
name: 'home'
});
return;
} else {
//已登錄的狀態(tài)去首頁(yè)
next();
return;
}
}
} else {
//去登錄頁(yè)面以外的頁(yè)面(以下是本文關(guān)鍵代碼)
if (user && user != '') {
//判斷是否為需要緩存組件,如果是添加組件名到數(shù)組
if (to.meta.keepAlive) {
const toName = to.name;
let keepLi = store.getters.getKeepAlList;
keepLi.indexOf(toName) < 0 ? keepLi.push(toName) : '';
store.commit('SET_KEEPALLIST', keepLi);
}
//根據(jù)路徑名深度設(shè)置轉(zhuǎn)場(chǎng)動(dòng)畫類型
store.commit('SET_TRANSNA', (to.path.split('/').length < from.path.split('/').length ? 'leftin' : 'rightin'));
next();
} else {
let toWhere = router.nameList.indexOf(to.name) >= 0 ? to : {name: 'home'};
next({
name: 'login',
params: {
jumpTo: {
name: toWhere.name,
params: toWhere.params,
query: toWhere.query,
},
}
});
}
}
});
總結(jié)
以上所述是小編給大家介紹的vue router自動(dòng)判斷左右翻頁(yè)轉(zhuǎn)場(chǎng)動(dòng)畫效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- vue+animation實(shí)現(xiàn)翻頁(yè)動(dòng)畫
- vue 翻頁(yè)組件vue-flip-page效果
- vue 實(shí)現(xiàn)滾動(dòng)到底部翻頁(yè)效果(pc端)
- vue-awesome-swiper 基于vue實(shí)現(xiàn)h5滑動(dòng)翻頁(yè)效果【推薦】
- Vue實(shí)現(xiàn)簡(jiǎn)易翻頁(yè)效果源碼分享
- Vue2.0+ElementUI實(shí)現(xiàn)表格翻頁(yè)的實(shí)例
- 基于Vue2.0+ElementUI實(shí)現(xiàn)表格翻頁(yè)功能
- 基于vue實(shí)現(xiàn)分頁(yè)/翻頁(yè)組件paginator示例
- 基于Vuejs框架實(shí)現(xiàn)翻頁(yè)組件
- vue實(shí)現(xiàn)數(shù)字翻頁(yè)動(dòng)畫
相關(guān)文章
vue+element-ui中form輸入框無(wú)法輸入問(wèn)題的解決方法
很多初次接觸element-ui的同學(xué),在用到element form組件時(shí)可能會(huì)遇到input框無(wú)法輸入文字的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于vue+element-ui中form輸入框無(wú)法輸入問(wèn)題的解決方法,需要的朋友可以參考下2023-04-04
在Vue+Ts+Vite項(xiàng)目中配置別名指向不同的目錄并引用的案例詳解
這篇文章主要介紹了在Vue+Ts+Vite項(xiàng)目中配置別名指向不同的目錄并引用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
vue.js給動(dòng)態(tài)綁定的radio列表做批量編輯的方法
下面小編就為大家分享一篇vue.js給動(dòng)態(tài)綁定的radio列表做批量編輯的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
解決vue使用vant輪播組件swipe + flex時(shí)文字抖動(dòng)問(wèn)題
這篇文章主要介紹了解決vue使用vant輪播組件swipe + flex時(shí)文字抖動(dòng)問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-01-01
vue中使用v-if,v-else來(lái)設(shè)置css樣式的步驟
我們?cè)谑褂胿ue項(xiàng)目開(kāi)發(fā)時(shí),v-if是使用的非常多的,在這里我們談?wù)勅绾问褂胿-i來(lái)綁定修改css樣式,使用的主要是雙向數(shù)據(jù)綁定,即通過(guò)改變他的狀態(tài)來(lái)改變他的樣式,這篇文章主要介紹了vue中如何使用v-if,v-else來(lái)設(shè)置css樣式,需要的朋友可以參考下2023-03-03
Vue中的驗(yàn)證登錄狀態(tài)的實(shí)現(xiàn)方法
這篇文章主要介紹了Vue中的驗(yàn)證登錄狀態(tài)的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03

