• 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

  • 相关阅读:
    directives vant之Field输入限制【v-input-float】
    【vue】 typeScript OSS图片压缩处理工具类
    vue单页面加载js方法
    H5网页打开App以及App内某个页面
    适配iphoneX万能方法!!!
    固定底部button按钮,兼容各种手机、微信等【flex布局】
    天行数据小程序demo
    iview Weapp index索引器 cityjs 增加每个城市的code值
    小程序上传图片至七牛云(支持多张上传、预览、删除图片)
    (转)异步与非阻塞之间的区别(看到的最清晰的说明)
  • 原文地址:https://www.cnblogs.com/NanKe-Studying/p/13750479.html
Copyright © 2020-2023  润新知