[Vue3]Transition + Component实现路由跳转浅入浅出效果

[Vue3]Transition + Component实现路由跳转浅入浅出效果

实现

transition + component组合

<template>
    <!--    <router-view />-->

    <router-view v-slot="{ Component, route }">
        <transition name="fade" mode="out-in">
            <component :is="Component" :key="route.path" />
        </transition>
    </router-view>
</template>

<style>
.fade-enter-active,
.fade-leave-active {
    transition: opacity 0.5s ease;
}

.fade-enter-from,
.fade-leave-to {
    opacity: 0;
}
</style>

Transition简介

官网介绍:https://cn.vuejs.org/guide/built-ins/transition.html#css-based-transitions

Vue 提供了两个内置组件,可以帮助你制作基于状态变化的过渡和动画:

  • <Transition> 会在一个元素或组件进入和离开 DOM 时应用动画。本章节会介绍如何使用它。
  • <TransitionGroup> 会在一个 v-for 列表中的元素或组件被插入,移动,或移除时应用动画。

在进入/离开的过渡中,会有 6 个 class 切换。

  1. v-enter-from:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。
  2. v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
  3. v-enter-to:定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter-from 被移除),在过渡/动画完成之后移除。
  4. v-leave-from:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。
  5. v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。
  6. v-leave-to:离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave-from 被移除),在过渡/动画完成之后移除。

如下

<button @click='flag = !flag'>切换</button>
<transition name='fade'>
    <div v-if='flag' class="box"></div>
</transition>
//开始过渡
.fade-enter-from{
    background:red;
    width:0px;
    height:0px;
    transform:rotate(360deg)
}
//开始过渡了
.fade-enter-active{
    transition: all 2.5s linear;
}
//过渡完成
.fade-enter-to{
    background:yellow;
    width:200px;
    height:200px;
}
//离开的过渡
.fade-leave-from{
    width:200px;
    height:200px;
    transform:rotate(360deg)
}
//离开中过渡
.fade-leave-active{
    transition: all 1s linear;
}
//离开完成
.fade-leave-to{
    width:0px;
    height:0px;
}

Component简介

是一种内置特殊元素,性质类似于slot

介绍地址:https://cn.vuejs.org/api/built-in-special-elements.html

要渲染的实际组件由 is prop 决定。

  • is 是字符串,它既可以是 HTML 标签名也可以是组件的注册名。
  • 或者,is 也可以直接绑定到组件的定义。
<script>
import Foo from './Foo.vue'
import Bar from './Bar.vue'

export default {
  components: { Foo, Bar },
  data() {
    return {
      view: 'Foo'
    }
  }
}
</script>

<template>
  <component :is="view" />
</template>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Vue 3的路由跳转添加动画效果,你可以通过使用Vue的过渡组件来实现。 首先,在你的Vue组件中,使用`<router-view>`标签来渲染路由组件。然后,在需要添加动画效果的地方,使用Vue的过渡组件包裹住对应的元素。 下面是一个示例代码,演示如何在路由切换时添加淡入淡出的动画效果: ```html <template> <transition name="fade"> <router-view></router-view> </transition> </template> <style> .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter, .fade-leave-to { opacity: 0; } </style> ``` 在上述代码中,我们使用了`<transition>`组件包裹了`<router-view>`标签,然后根据路由切换时的状态,在对应的CSS类中定义了动画效果。具体来说,`.fade-enter-active`和`.fade-leave-active`类定义了动画过渡的时间和属性(这里使用了opacity属性),而`.fade-enter`和`.fade-leave-to`类则定义了进入和离开时的初始和最终状态。 你可以根据自己的需求,在过渡组件内定义不同的CSS类来实现不同的动画效果,比如滑动、缩放等。 同时,确保在你的路由配置中,启用了过渡效果。在使用Vue Router时,你可以通过设置`<router-view>`标签的`v-slot`来自定义过渡效果。 ```html <template> <transition name="fade"> <router-view v-slot="{ Component }"> <transition :name="getTransitionName"> <component :is="Component"></component> </transition> </router-view> </transition> </template> <script> export default { computed: { getTransitionName() { // 根据路由配置返回对应的过渡效果名称 // 比如根据路由的名称、路径等进行判断 return 'fade'; }, }, }; </script> ``` 在上述代码中,我们通过计算属性`getTransitionName`根据当前路由的配置返回对应的过渡效果名称,然后在`<transition>`组件中使用动态的`name`属性来实现不同的过渡效果。 这样,当你进行路由切换时,就会触发相应的过渡效果,并实现动画效果的添加。 希望这能帮到你!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值