Vue路由动画,根据路由路径切片长度

Vue路由动画,根据路由路径切片长度,支持H5Plus安卓返回

// 在路由文件中创建好的路由router
// router = createWebHashHistory(xxx)
// 移动端覆盖内容处理,下面为移动端补丁
router.beforeEach((to, from) => {
  const toDepth = to.path.split('/').length
  const fromDepth = from.path.split('/').length
  to.meta.transition = toDepth > fromDepth ? 'scale-slide-right' : 'scale-slide-left'
  titleRef.value = (to.meta.title as string) || document.title
})

// H5Plus支持
function plusReady() {
  // Android处理返回键
  plus.key.addEventListener('backbutton', function () {
    if (location.hash === '#/' || !location.hash) {
      // 入口页了,转入后台运行。
      const main = plus.android.runtimeMainActivity()
      main.moveTaskToBack(false)
    } else {
      router.back()
    }
  }, false)
}
if (window.plus) {
  plusReady()
} else {
  document.addEventListener('plusready', plusReady, false)
}

<RouterView
  class="absolute"
  v-slot="{ Component, route }">
  <Transition :name="route.meta.transition as string">
    <Component :is="Component" />
  </Transition>
</RouterView>
.scale-slide-right-enter-active,
.scale-slide-right-leave-active {
  transition: all 0.3s ease;
}

.scale-slide-right-enter-from {
  left: 100%;
}

.scale-slide-right-enter-to {
  left: 0%;
}

.scale-slide-right-leave-from {
  transform: scale(1);
}

.scale-slide-right-leave-to {
  transform: scale(0.8);
}

.scale-slide-left-enter-active,
.scale-slide-left-leave-active {
  transition: all 0.3s ease;
}

.scale-slide-left-enter-from {
  left: -100%;
}

.scale-slide-left-enter-to {
  left: 0%;
}

.scale-slide-left-leave-from {
  left: 0%;
  /* transform: scale(1); */
}

.scale-slide-left-leave-to {
  left: 100%;
  /* transform: scale(0.8); */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值