美文网首页
vue app 切换动画

vue app 切换动画

作者: 正在成长的切图仔 | 来源:发表于2021-04-23 17:07 被阅读0次

    实现问题

    1.如何判断切换路由时是前进还是后退
    2.每次切换时向左向右切换动画如何实现

    实现原理

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

    import Vue from 'vue'
    import VueRouter from 'vue-router'
    import Home from '../views/home/Home.vue'
    Vue.use(VueRouter)
    
    let routes = [
      {
        path: '/',
        redirect: '/home'
      },
      {
        path: '/home',
        name: 'home',
        component: Home,
        meta: {
          showMenu: true,
          index:0 //meta对象的index用来定义当前路由的层级,由小到大,由低到高
        },
      },
      {
        path: '/login',
        name: 'login',
        component: () => import("@/views/login/login"),
        meta: {
          showMenu: false,
        },
      },
      {
        path: '/register',
        name: 'register',
        component: () => import("@/views/login/register"),
        meta: {
          showMenu: false,
        },
      },
      {
        path: '/retrievePassword',
        name: 'retrievePassword',
        component: () => import("../views/mine/retrievePassword.vue")
        meta: {
            showMenu: false,
        },
      }
    ]
    

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

    <template>
      <div id="app">
        <footer-menu v-if="showMenu" />
          <transition :mode="mode" :name="transitionName">
            <router-view class="center"></router-view>
          </transition>
      </div>
    </template>
      
    <script>
    export default{
      data() {
        return {
          mode: '',
          transitionName: 'slide-left', //默认动画
        };
      },
     watch: {
        $route(to, from) {
          //页面切换动画
          console.log(to);
          let toName = to.name;
          const toIndex = to.meta.index;
          const fromIndex = from.meta.index;
          if (toIndex == undefined) {
            this.mode = 'out-in';
            this.transitionName = '';
          } else {
            this.mode = '';
            this.transitionName = toIndex < fromIndex ? 'slide-right' : 'slide-left';
          }
        },
      },
    
    }
    </script>
    

    3.编写slide-left 和 slide-right 类的动画

    // -----------
    /*app.vue  的style*/
    .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);
    }
    

    相关文章

      网友评论

          本文标题:vue app 切换动画

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