Vue - 关于Router路由跳转时显示的animate.css动画

Vue - 关于Router路由跳转时显示的animate.css动画

在Vue中,操作路由跳转时页面是闪白的,没有动画效果,我们可以通过在router-view中设置transition,并搭配animate丰富的动画效果来美化路由跳转时的显示效果.

1.安装animate

npm i -S animate.css

2.在main中引入animate.css

import 'animate.css'

3.在需要路由router-view跳转的页面中设置

如果用< transition >包裹< router-view >会出现leave-active-class动画失效

<template>
  <router-view class="view" v-slot="{ Component }">
    <transition
      mode="out-in"
      enter-active-class="animate__animated animate__fadeInRight"
      leave-active-class="animate__animated animate__fadeOutLeft"
    >
      <component :is="Component" />
    </transition>
  </router-view>
</template>

效果如下:

在这里插入图片描述

目前 Vue 的transition内置标签只能控制一种动画类型,要么是 CSS transition 过渡动画,要么是 CSS animation 关键帧动画。

CSS transition 过渡动画:

  1. v-enter-from 淡入效果的起始状态。它先附加到元素上,然后元素被插入 DOM 树。插入 DOM 树后,下一帧该类被立即移除。

  2. v-enter-active 淡入效果的过渡状态,整个过渡期间生效。该类用于设定动画时长、延时和缓动曲线(easing curve)等动画参数。

  3. v-enter-to 淡入效果的最终状态。当 v-enter-from 类被移除的同时,添加 v-enter-to 类。当过渡动画结束后,移除 v-enter-to 类。

  4. v-leave-from 淡出效果的起始状态。

  5. v-leave-active 淡出效果的过渡状态。

  6. v-leave-to 淡出效果的最终状态。

CSS animation 关键帧动画:

  1. enter-from-class

  2. enter-active-class

  3. enter-to-class

  4. leave-from-class

  5. leave-active-class

  6. leave-to-class

对于关键帧动画,只需设定 enter-active-classleave-active-class 即可。

注意事项:

问题:
淡出和淡入同时发生
解决方法:
默认情况下,元素的淡出和淡入是同时发生的。设定属性 mode=“out-in”,可以协调不同元素的动画时序,先淡出后淡入。

参考链接:
animate动画:https://animate.style/

### Vue3 中实现路由切换动画Vue3 应用程序中,通过 `vue-router` 和 `<transition>` 组件可以轻松创建页面之间的过渡动画效果。为了确保每次路由变化都能触发新的动画,通常会在 `<router-view>` 上绑定唯一的键值。 对于具体的实现方式,在脚本部分定义了一个响应式的变量 `transitionName` 来存储当前应该应用的动画名称,并利用 `beforeEach` 导航守卫来监听路由的变化并设置相应的动画方向[^1]: ```javascript <script setup> import { RouterLink, useRouter } from 'vue-router'; import { ref } from 'vue'; let transitionName = ref(); let router = useRouter(); router.beforeEach((to, from) => { if (to.meta.index > from.meta.index){ transitionName.value = 'slide-right'; } else if(to.meta.index < from.meta.index){ transitionName.value = 'slide-left'; } else{ transitionName.value = ''; } }); </script> ``` 接着,在模板区域使用带有插槽属性的 `<router-view>` 并包裹一层 `<transition>` 标签,同指定进入和离开使用的 CSS 类名以及模式为 `out-in` 以确保旧组件完全消失后再显示新组件[^3]: ```html <template> <!-- ... --> <router-view v-slot="{ Component }"> <transition :name="transitionName" mode="out-in"> <component :is="Component"/> </transition> </router-view> <!-- ... --> </template> ``` 需要注意的是,为了让每个视图都具有独立的状态从而正确触发动画,应当给内部容器加上唯一标识符作为其 `key` 属性值: ```html <div :key="$route.fullPath">...</div> <!-- 使用 fullPath 或 path 均可 --> ``` 此外,还可以借助第三方库如 Animate.css 提供丰富的预设样式来进行更复杂的视觉变换操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值