Vue進(jìn)階之利用transition標(biāo)簽實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)動(dòng)畫(huà)
一、前言
在Vue項(xiàng)目開(kāi)發(fā)過(guò)程中,應(yīng)用全家桶vue-router實(shí)現(xiàn)路由跳轉(zhuǎn),且頁(yè)面前進(jìn)、后退跳轉(zhuǎn)過(guò)程中,分別對(duì)應(yīng)不同的切換動(dòng)畫(huà)。vue-router 切換頁(yè)面時(shí)怎么設(shè)置過(guò)渡動(dòng)畫(huà)?
首先,需要考慮以下問(wèn)題:
如何判斷切換路由時(shí)是前進(jìn)還是后退?
每次切換時(shí)向左向右切換動(dòng)畫(huà)如何實(shí)現(xiàn)?
可通過(guò)以下解決方案實(shí)現(xiàn):
給各個(gè)頁(yè)面定義層級(jí),在切換路由時(shí)判斷用戶是進(jìn)入哪一層頁(yè)面。如果用戶進(jìn)入更高層級(jí)路由那么做前進(jìn)動(dòng)畫(huà),如果用戶退到低層級(jí)路由那么做后退動(dòng)畫(huà)。
二、方案實(shí)現(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對(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 }] });
通過(guò)watch
監(jiān)聽(tīng)函數(shù)監(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> <style> // 編寫(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); } </style>
三、延伸閱讀 transition標(biāo)簽
transition標(biāo)簽是Vue內(nèi)置動(dòng)畫(huà)標(biāo)簽,負(fù)責(zé)在插入、更新、移除DOM元素時(shí),給元素添加樣式
注意:transition標(biāo)簽只能包含一個(gè)元素,且包含的標(biāo)簽需要設(shè)置v-if/v-show控制元素顯示
動(dòng)畫(huà)樣式類(lèi)名
Vue2
進(jìn)入: .v-enter 始狀態(tài)、 .v-enter-active 進(jìn)入動(dòng)畫(huà)、 .v-enter-to 末狀態(tài)
離開(kāi):.v-leave 始狀態(tài)、.v-leave-active 離開(kāi)動(dòng)畫(huà)、v-leave-to 末狀態(tài)
Vue3
進(jìn)入:.v-enter-from 始狀態(tài)、.v-enter-active 進(jìn)入動(dòng)畫(huà)、.v-enter-to 末狀態(tài)
離開(kāi):.v-leave-from 始狀態(tài)、.v-leave-active 離開(kāi)動(dòng)畫(huà)、.v-leave-to 末狀態(tài)
四、拓展閱讀
《官方文檔》
到此這篇關(guān)于Vue進(jìn)階之利用transition標(biāo)簽實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)動(dòng)畫(huà)的文章就介紹到這了,更多相關(guān)Vue transition內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue.js中for循環(huán)如何實(shí)現(xiàn)異步方法同步執(zhí)行
這篇文章主要介紹了vue.js中for循環(huán)如何實(shí)現(xiàn)異步方法同步執(zhí)行問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Vue后臺(tái)中優(yōu)雅書(shū)寫(xiě)狀態(tài)標(biāo)簽的方法實(shí)例
在Vue中,我們可以非常便捷地通過(guò)標(biāo)簽實(shí)現(xiàn)狀態(tài)的保存,這篇文章主要給大家介紹了關(guān)于Vue后臺(tái)中如何優(yōu)雅的書(shū)寫(xiě)狀態(tài)標(biāo)簽的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08前端配合后端實(shí)現(xiàn)Vue路由權(quán)限的方法實(shí)例
一開(kāi)始我還以為vue的路由只能用在工程化的項(xiàng)目里面,其實(shí)不然,下面這篇文章主要給大家介紹了關(guān)于前端配合后端實(shí)現(xiàn)Vue路由權(quán)限的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05基于Vue實(shí)現(xiàn)簡(jiǎn)單的貪食蛇游戲
貪食蛇是一個(gè)非常經(jīng)典的游戲,?在游戲中,?玩家操控一條細(xì)長(zhǎng)的直線,?它會(huì)不停前進(jìn),?玩家只能操控蛇的頭部朝向,?一路拾起觸碰到之物。本文將用Vue實(shí)現(xiàn)這一游戲,感興趣的可以嘗試一下2022-04-04vue元素實(shí)現(xiàn)動(dòng)畫(huà)過(guò)渡效果
這篇文章主要介紹了vue元素實(shí)現(xiàn)動(dòng)畫(huà)過(guò)渡效果,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07vue3在router中使用store報(bào)錯(cuò)的完美解決方案
這篇文章主要介紹了vue3在router中使用store報(bào)錯(cuò)解決方案,就是需要在實(shí)例化一下,因?yàn)樵诰幾grouter的時(shí)候pinia還未被實(shí)例化,文中補(bǔ)充介紹了vue3中router和store詳細(xì)使用教程方法,感興趣的朋友一起看看吧2023-11-11vue前端路由以及vue-router兩種模式實(shí)例詳解
路由這個(gè)概念最先是后端出現(xiàn)的,下面這篇文章主要給大家介紹了關(guān)于vue前端路由以及vue-router兩種模式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03淺析Vue3中通過(guò)v-model實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡(jiǎn)化父子組件雙向綁定
這篇文章主要介紹了淺析Vue3中通過(guò)v-model實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡(jiǎn)化父子組件雙向綁定,需要的朋友可以參考下2022-12-12在Vue中實(shí)現(xiàn)圖表數(shù)據(jù)的動(dòng)態(tài)展示的示例代碼
隨著數(shù)據(jù)可視化技術(shù)的發(fā)展,圖表在前端開(kāi)發(fā)中扮演著越來(lái)越重要的角色,Vue.js 作為一個(gè)流行的前端框架,以其靈活性和易用性,成為了實(shí)現(xiàn)圖表動(dòng)態(tài)展示的理想選擇,在這篇博客中,我們將學(xué)習(xí)如何在 Vue 3 中實(shí)現(xiàn)動(dòng)態(tài)展示圖表數(shù)據(jù),需要的朋友可以參考下2024-11-11