整理了网上的一些转场效果的方案并记录下来.vue
(地址)https://github.com/jaweii/vueg
这个组件能够支持不少效果,可是有个缺点就是没法支持嵌套路由的转场,所以有了下面的第二个办法git
咱们须要给各个页面定义层级,在切换路由时判断用户是进入哪一层页面,若是用户进入更高层级那么作前进动画,若是用户退到低层级那么作后退动画.github
router/index.jsvue-router
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 }] });
监控路由跳转,判断切换页面之间的层级关系,并以此来判断路由前进或者后退.app
<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 类的动画ide
//转场动画 .slide-right-enter-active, .slide-right-leave-active, .slide-left-enter-active, .slide-left-leave-active { // 启用硬件加速 will-change: transform; transition: all 300ms; position: fixed; } .slide-right-enter { // opacity: 0; transform: translate(-100%, 0); transition-timing-function:ease-in; } .slide-right-leave-active { // opacity: 0; // 安卓手机上同时进行离开和进入会出现闪白现象,暂时不启用离开动画 // transform: translate(100%, 0); // transition-timing-function: cubic-bezier(0.5,0,1,1); } .slide-left-enter { // opacity: 0; transform: translate(100%, 0); transition-timing-function:ease-in; } .slide-left-leave-active { // opacity: 0; // 安卓手机上同时进行离开和进入会出现闪白现象,暂时不启用离开动画 // transition-timing-function: cubic-bezier(0.5,0,1,1); // transform: translate(-100%, 0); }