JavaScript

超轻量级php框架startmvc

使用vue-router切换页面时实现设置过渡动画

更新时间:2020-09-20 04:00:01 作者:startmvc
背景今天在编写页面时,看到页面没有任何效果就只是直入直出,完全没有一点逼格,所以想要

背景

今天在编写页面时,看到页面没有任何效果就只是直入直出,完全没有一点逼格,所以想要实现类似于原生app的那种切换页面时的特效,遂开始google,发现网上各种方案都是各有优缺点,于是整理了自认为优雅的方案并记录下来.

实现难点

如何判断切换路由时是前进还是后退

每次切换时向左向右切换动画如何实现

解决方案

我们需要给各个页面定义层级,在切换路由时判断用户是进入哪一层页面,如果用户进入更高层级那么做前进动画,如果用户退到低层级那么做后退动画.

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
 }]
});

监控路由跳转,判断切换页面之间的层级关系,并以此来判断路由前进或者后退.


<template>
 <div id="app">
 <transition :name="transitionName"> 
 <router-view></router-view>
 </transition>
 </div>
</template>

<script>
export default {
 name: 'App',
 data(){
 return {
 transitionName:''
 }
 },
 watch: {//使用watch 监听$router的变化
 $route(to, from) {
 //如果to索引大于from索引,判断为前进状态,反之则为后退状态
 if(to.meta.index > from.meta.index){
 //设置动画名称
 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);
}

示例

CSDN markdown 禁用了iframe, 有翻墙工具的可以点击codesandbox demo.

以上这篇使用vue-router切换页面时实现设置过渡动画就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

vue router 切换页面 过渡动画