zoukankan      html  css  js  c++  java
  • 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:'<div>test</div>'
            }
        },{
            name:'home',
            path:'/home',
            meta:{index:1},
            component:Home
        },{
            name:'user',
            path:'/user/:id',
            meta:{index:2},
            component:User
        }]
    });

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

    <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>

    3.编写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);
    }

    转载搬运:https://blog.csdn.net/qq_33236453/article/details/79110485

  • 相关阅读:
    [js对象]JS入门之Date对象
    从Microsoft SqlServer 2005中返回有一定顺序的记录集
    [js对象]JS入门之Global对象
    [JS.IntelliSense]VS2008(Orcas) So Cool
    即插即用插件式框架的程序集处理遐想(TypeFinder)
    [C#3.0体验]Orcas中内置的LinQ,XLinQ[DLinQ]扩展方法
    [ASP.NET入门]页面生命周期
    [IE]IE6&IE7运行于同一个系统中
    [js对象]JS入门之Boolean&Object对象
    RSS(Really Simple Syndication)常用标签
  • 原文地址:https://www.cnblogs.com/NanKe-Studying/p/13750479.html
Copyright © 2011-2022 走看看