使用vue-router切換頁(yè)面時(shí)實(shí)現(xiàn)設(shè)置過(guò)渡動(dòng)畫(huà)
背景
今天在編寫(xiě)頁(yè)面時(shí),看到頁(yè)面沒(méi)有任何效果就只是直入直出,完全沒(méi)有一點(diǎn)逼格,所以想要實(shí)現(xiàn)類(lèi)似于原生app的那種切換頁(yè)面時(shí)的特效,遂開(kāi)始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)畫(huà)如何實(shí)現(xiàn)
解決方案
我們需要給各個(gè)頁(yè)面定義層級(jí),在切換路由時(shí)判斷用戶(hù)是進(jìn)入哪一層頁(yè)面,如果用戶(hù)進(jìn)入更高層級(jí)那么做前進(jìn)動(dòng)畫(huà),如果用戶(hù)退到低層級(jí)那么做后退動(dòng)畫(huà).
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)聽(tīng)$router的變化 $route(to, from) { //如果to索引大于from索引,判斷為前進(jìn)狀態(tài),反之則為后退狀態(tài) if(to.meta.index > from.meta.index){ //設(shè)置動(dòng)畫(huà)名稱(chēng) this.transitionName = 'slide-left'; }else{ this.transitionName = 'slide-right'; } } } } </script>
編寫(xiě)slide-left 和 slide-right 類(lèi)的動(dòng)畫(huà)
.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è)置過(guò)渡動(dòng)畫(huà)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- react組件中過(guò)渡動(dòng)畫(huà)的問(wèn)題解決
- vue實(shí)現(xiàn)過(guò)渡動(dòng)畫(huà)Message消息提示組件示例詳解
- Flutter添加頁(yè)面過(guò)渡動(dòng)畫(huà)實(shí)現(xiàn)步驟
- 十分鐘帶你快速上手Vue3過(guò)渡動(dòng)畫(huà)
- vue實(shí)現(xiàn)列表滾動(dòng)的過(guò)渡動(dòng)畫(huà)
- vue-router之實(shí)現(xiàn)導(dǎo)航切換過(guò)渡動(dòng)畫(huà)效果
- 原生JS實(shí)現(xiàn)Vue transition fade過(guò)渡動(dòng)畫(huà)效果示例
相關(guān)文章
用vuex寫(xiě)了一個(gè)購(gòu)物車(chē)H5頁(yè)面的示例代碼
本篇文章主要介紹了用vuex寫(xiě)了一個(gè)購(gòu)物車(chē)H5頁(yè)面的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(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ì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08VUE2.0 ElementUI2.0表格el-table自適應(yīng)高度的實(shí)現(xiàn)方法
在開(kāi)發(fā)中,需要表格控件根據(jù)瀏覽器高度進(jìn)行調(diào)整,固定表頭,本文主要介紹了VUE2.0 ElementUI2.0表格el-table自適應(yīng)高度的實(shí)現(xiàn)方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-11-11vue實(shí)現(xiàn)網(wǎng)易云音樂(lè)純界面
這篇文章主要為大家介紹了vue實(shí)現(xiàn)網(wǎng)易云音樂(lè)純界面過(guò)程詳解,附含詳細(xì)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07el-date-picker日期選擇限制范圍的實(shí)例代碼
這篇文章主要介紹了el-date-picker日期選擇限制范圍,本文通過(guò)實(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