Vue3如何实现路由左右切换过渡动画?

Vue3如何实现路由左右切换过渡动画?

前言

你是否也想要实现丝滑地路由左右切换的过渡动画?
那你有没有什么好的实现方案呢?
想用插件,但vue3的插件很有限,大多数插件都不支持vue3?
来看看这篇文章,简单的几行代码,帮你解决困扰。

核心实现代码

App.vue

<template>
  <router-view v-slot="{ Component, route }">
    <transition :name="typeof route.meta.transition === 'string' ? route.meta.transition : 'slide-left'" mode="out-in">
      <component :is="Component" :key="route.path" />
    </transition>
  </router-view>
</template>

<style>
.slide-left-enter-active,
.slide-right-enter-active {
  transition: transform 0.3s ease;
}

.slide-left-enter-from {
  transform: translateX(100%);
}

.slide-left-leave-to {
  transform: translateX(-100%);
}

.slide-right-enter-from {
  transform: translateX(-100%);
}

.slide-right-leave-to {
  transform: translateX(100%);
}
</style>

router/index.ts

加一个路由后置守卫

let historyRoutes: string[] = [];

router.afterEach((to, from) => {
  // 判断导航类型
  if (historyRoutes.includes(to.path)) {
    historyRoutes = historyRoutes.filter(item => item !== to.path);
    to.meta.transition = 'slide-right'
  } else {
    historyRoutes.push(from.path);
    to.meta.transition = 'slide-left'
  }
})

历史记录里面没有的时候往里面添加from的path,页面设置从左边进入
历史记录里面有的话就从历史记录里面删除,页面设置从右边进入

结语

一段很简单的代码,希望对你有帮助。
有用到的朋友,留下一个关注和赞。
关注我,不迷路,不定时分享前端页面开发中遇到小问题以及好的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值