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

如何实现切换页面时的过渡动画?

背景

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

实现难点

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

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

解决方案

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

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:'
test
' } },{ name:'home', path:'/home', meta:{index:1}, component:Home },{ name:'user', path:'/user/:id', meta:{index:2}, component:User }] });
  1. 监控路由跳转,判断切换页面之间的层级关系,并以此来判断路由前进或者后退.



  1. 编写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)