Vue進階之利用transition標(biāo)簽實現(xiàn)頁面跳轉(zhuǎn)動畫
一、前言
在Vue項目開發(fā)過程中,應(yīng)用全家桶vue-router實現(xiàn)路由跳轉(zhuǎn),且頁面前進、后退跳轉(zhuǎn)過程中,分別對應(yīng)不同的切換動畫。vue-router 切換頁面時怎么設(shè)置過渡動畫?
首先,需要考慮以下問題:
如何判斷切換路由時是前進還是后退?
每次切換時向左向右切換動畫如何實現(xiàn)?
可通過以下解決方案實現(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用來定義當(dāng)前路由的層級,由小到大,由低到高 component:{ template:'<div>test</div>' } },{ name:'home', path:'/home', meta:{index:1}, component:Home },{ name:'user', path:'/user/:id', meta:{index:2}, component:User }] });
通過watch
監(jiān)聽函數(shù)監(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> <style> // 編寫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); } </style>
三、延伸閱讀 transition標(biāo)簽
transition標(biāo)簽是Vue內(nèi)置動畫標(biāo)簽,負責(zé)在插入、更新、移除DOM元素時,給元素添加樣式
注意:transition標(biāo)簽只能包含一個元素,且包含的標(biāo)簽需要設(shè)置v-if/v-show控制元素顯示
動畫樣式類名
Vue2
進入: .v-enter 始狀態(tài)、 .v-enter-active 進入動畫、 .v-enter-to 末狀態(tài)
離開:.v-leave 始狀態(tài)、.v-leave-active 離開動畫、v-leave-to 末狀態(tài)
Vue3
進入:.v-enter-from 始狀態(tài)、.v-enter-active 進入動畫、.v-enter-to 末狀態(tài)
離開:.v-leave-from 始狀態(tài)、.v-leave-active 離開動畫、.v-leave-to 末狀態(tài)
四、拓展閱讀
《官方文檔》
到此這篇關(guān)于Vue進階之利用transition標(biāo)簽實現(xiàn)頁面跳轉(zhuǎn)動畫的文章就介紹到這了,更多相關(guān)Vue transition內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue.js中for循環(huán)如何實現(xiàn)異步方法同步執(zhí)行
這篇文章主要介紹了vue.js中for循環(huán)如何實現(xiàn)異步方法同步執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02Vue后臺中優(yōu)雅書寫狀態(tài)標(biāo)簽的方法實例
在Vue中,我們可以非常便捷地通過標(biāo)簽實現(xiàn)狀態(tài)的保存,這篇文章主要給大家介紹了關(guān)于Vue后臺中如何優(yōu)雅的書寫狀態(tài)標(biāo)簽的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-08-08前端配合后端實現(xiàn)Vue路由權(quán)限的方法實例
一開始我還以為vue的路由只能用在工程化的項目里面,其實不然,下面這篇文章主要給大家介紹了關(guān)于前端配合后端實現(xiàn)Vue路由權(quán)限的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-05-05淺析Vue3中通過v-model實現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡化父子組件雙向綁定
這篇文章主要介紹了淺析Vue3中通過v-model實現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡化父子組件雙向綁定,需要的朋友可以參考下2022-12-12在Vue中實現(xiàn)圖表數(shù)據(jù)的動態(tài)展示的示例代碼
隨著數(shù)據(jù)可視化技術(shù)的發(fā)展,圖表在前端開發(fā)中扮演著越來越重要的角色,Vue.js 作為一個流行的前端框架,以其靈活性和易用性,成為了實現(xiàn)圖表動態(tài)展示的理想選擇,在這篇博客中,我們將學(xué)習(xí)如何在 Vue 3 中實現(xiàn)動態(tài)展示圖表數(shù)據(jù),需要的朋友可以參考下2024-11-11