[Vue3]Transition + Component实现路由跳转浅入浅出效果
[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 切换。
v-enter-from
:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。v-enter-active
:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。v-enter-to
:定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时v-enter-from
被移除),在过渡/动画完成之后移除。v-leave-from
:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。v-leave-active
:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。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>
更多推荐
已为社区贡献4条内容
所有评论(0)