vue 路由动画过渡效果

为了增加用户体验,在切换路由时可加动态的过渡效果。
应用场景:
在这里插入图片描述
切换如上页面的底部导航栏,添加 动画过渡效果。

1、样式

/*路由切换 animation start */

.slide-left-enter-active,

.slide-left-leave-active {

  transition: 0.3s transform ease;

  backface-visibility: hidden;

  perspective: 1000;

}

.slide-left-enter {

  transform: translate3d(-100%, 0, 0);

}

.slide-left-enter-to,

.slide-left-leave {

  transform: translate3d(0%, 0, 0);

}

.slide-left-leave-to {

  transform: translate3d(100%, 0, 0);

}

.slide-right-enter-active,

.slide-right-leave-active {

  transition: 0.3s all ease-out;

  backface-visibility: hidden;

  perspective: 1000;

}

.slide-right-enter {

  transform: translate3d(100%, 0, 0);

}

.slide-right-enter-to,

.slide-right-leave {

  transform: translate3d(0, 0, 0);

}

.slide-right-leave-to {

  transform: translate3d(-100%, 0, 0);

}

/*路由切换 animation end */

2、路由配置

路由配置时,给路由对象加上meta属性,并在meta中加index属性和值,后端监听需要需要用该值来判断

routes: [{
        path: '/',//重定向
        redirect: '/home',
        meta: {
            index:1
        }
    }, {
        // 首页
        name: 'home',
        path: '/home',
        meta: {
            index:2
        },
        component: Home,
    }, {
        // 分类
        name: 'classify',
        path: '/classify',
        meta: {
            index:3
        },
        component: Classify
    }, {
        // 我的
        name: 'mine',
        path: '/mine',
        meta: {
            index:4
        },
        component: Mine
    },{
        // 吃饭吧
        name:'eat',
        path:'/eat',
        meta: {
            index:7
        },
        component:Eat
    },{
        // 购物车
        name:'cart',
        path:'/cart',
        component:Cart,
        meta: { requiresAuth: true,index:10 }
    }]

3、在App.vue中添加动态指令并监听路由

(1)给路由添加动态指令 ,并给个名字

<div id="app">
    <transition :name="transitionName">
      <router-view></router-view>
    </transition>
    <Footer></Footer>
  </div>

(2)监听路由
根据路由对象的index值来进行比较,给当前路由页面动态指令添加对应的类名

watch:{
    $route(to,from){
      console.log(to,77);
      console.log(from,88);
      const fromIndex=from.meta.index
      const toIndex=to.meta.index
      if (toIndex > fromIndex) {
        this.transitionName = 'slide-right'
      } else if (toIndex < fromIndex) {
        this.transitionName = 'slide-left'
      } else {
        this.transitionName = ''
      }
    }
  }
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值