vue3 transition 实现动画淡入淡出效果

作者: tww844475003 分类: 前端开发 发布时间: 2024-08-03 22:17

Vue3中,内置了一些组件,其中之一是<transition>组件。<transition>组件用于在元素插入或删除时,为其添加过渡效果

基本使用

<transition name="fade" mode="out-in">
  <div v-if="show" key="1">内容淡入淡出</div>
</transition>
  • 经典案例一(菜单切换)
<button @click="show = !show">菜单切换</button>
<transition name="slide" mode="out-in">
	<div v-if="show" key="1">菜单一</div>
	<div v-else key="2">菜单二</div>
</transition>

CSS样式

.slide-enter-active,
.slide-leave-active {
	transition: opacity 0.3s;
}
.slide-enter-from,
.slide-leave-to {
	opacity: 0;
}

这样就实现了一个淡入淡出效果,是不是非常非常的简单。是不是有点难以相信,事实就是如此。

我们升级一下需求,如果需要菜单是向上翻滚,类似模方效果了,如果实现了

<button @click="show = !show">Toggle</button>
<transition name="cube" mode="out-in">
	<div v-if="show" class="cube-face" key="1">1</div>
	<div v-else class="cube-face" key="2">2</div>
</transition>

CSS样式

.cube-face {
	width: 100px;
	height: 100px;
	background-color: #42b983;
	position: absolute;
	transition: transform 1s ease;
}

.cube-enter-active,
.cube-leave-active {
	transition: all 1s ease;
}

.cube-enter-from,
.cube-leave-to {
	transform: translateY(100px) rotateX(-90deg);
	opacity: 0;
}

.cube-enter-to,
.cube-leave-from {
	transform: translateY(0) rotateX(0deg);
	opacity: 1;
}

其实就是样式有点区别,利用 transition 内置组件和css动画可以做很多完美的特效,真是不要太简单了。

使用注意项

在使用 Vue 3 中的内置组件 transition 时,有一些需要注意的地方:

导入 transition 组件:在 Vue 3 中,transition 组件已经被重命名为 Transition,所以在导入时需要使用 import { Transition } from ‘vue’。

使用 Transition 组件:在 Vue 3 中,Transition 组件的使用方式与 Vue 2 有一些不同。首先,Transition 组件的标签名已经改为 …,而不再是 …。此外,Transition 组件的属性也有一些改变,例如 name 属性改为 name 或 appear、appear-from-class、appear-to-class 等属性改为 appear、enter-from-class、enter-to-class 等属性。

使用不同的过渡类名:在 Vue 3 中,过渡类名的生成方式也有所改变。以前,Vue 2 默认使用 v- 前缀加上过渡类型名称作为类名,例如 v-enter、v-leave-to 等。而在 Vue 3 中,使用了更加直观的类名,例如 enter-active、leave-active 等。这意味着在使用自定义过渡类名时,需要根据 Vue 3 的类名规则进行相应的修改。

使用 v-if 和 v-show:在 Vue 3 中,transition 组件不再支持与 v-if 和 v-show 一起使用。如果需要在组件动态切换时实现过渡效果,可以考虑使用 transition 组件的 appear 属性或 Transition 组件的 v-if 和 v-else。

使用 JSX:如果在 Vue 3 中使用 JSX 的方式来写模板代码,需要注意 Transition 组件的使用方式与普通模板的略有不同。在 JSX 中,需要使用 v-slots 来定义过渡的内容,并且 Transition 组件需要使用闭合标签 。

前端开发那点事
微信公众号搜索“前端开发那点事”

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注