美文网首页前端开发工具
vue单页面增加转场效果

vue单页面增加转场效果

作者: 施主画个猿 | 来源:发表于2018-04-10 13:53 被阅读2次

    整理了网上的一些转场效果的方案并记录下来.

    一 VUEG

    (地址)https://github.com/jaweii/vueg
    这个组件可以支持很多效果,但是有个缺点就是无法支持嵌套路由的转场,因此有了下面的第二个办法

    二 自定义层级和动画

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

    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
        }]
    });
    
    1. 监控路由跳转,判断切换页面之间的层级关系,并以此来判断路由前进或者后退.
    <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>
    
    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 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);
    }
    

    相关文章

      网友评论

        本文标题:vue单页面增加转场效果

        本文链接:https://www.haomeiwen.com/subject/hrzghftx.html