Vue中如何实现过渡动画效果

这篇“Vue中如何实现过渡动画效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中如何实现过渡动画效果”文章吧。

Vue的transition动画

Transition动画的使用

在开发中,我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验

React框架本身并没有提供任何动画相关的API,所以在React中使用过渡动画我们需要使用一个第三方库 react-transition-group;

Vue中为我们提供一些内置组件和对应的API来完成动画,利用它们我们可以方便的实现过渡动画效果;

我们来看一个案例

Hello World的显示和隐藏;

通过下面的代码实现,显式和隐藏Hello World是不会有任何动画效果的;

<template>
  <div class="app">
    <button @click="btnClick">Toogle</button>
    <h3 v-show="isShow">Hello World</h3>
  </div>
</template>

<script setup>
import { ref } from 'vue';

const isShow = ref(true)
const btnClick = () => {
  isShow.value = !isShow.value
}
</script>

没有动画的情况下,整个内容的显示和隐藏会非常的生硬

如果我们希望给单元素或者组件实现过渡动画,可以使用Vue提供的 transition 内置组件来完成动画;

Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡

条件渲染 (使用 v-if)条件展示 (使用 v-show)

动态组件

组件根节点

例如我们给刚刚的Hello World添加动画, 首先定义类(类的名字暂时是固定的)

/* 从什么状态进入 */
.v-enter-from {
  opacity: 0;
}

/* 进入之后打算变成的状态 */
.v-enter-to {
  opacity: 1;
}

/* 进入的过程中做什么 */
.v-enter-active {
  transition: opacity 2s linear;
}

定义好类之后, 我们可以使用Vue的内置组件 transition 将动画元素包裹起来, transition 组件会自动在合适的时机, 将合适的类添加到它所包裹的元素上

<template>
  <div class="app">
    <button @click="btnClick">Toogle</button>
    <!-- 使用内置组件包裹h3 -->
    <transition>
      <h3 v-show="isShow">Hello World</h3>
    </transition>
  </div>
</template>

此时显式Hello World 就已经有动画效果了, 但是隐藏时并没有效果, 是因为我们刚刚定义的类是进入的类, 当离开时我们也应该定义对应的类

/* 离开后的状态 */
.v-leave-to,
/* 从什么状态进入 */
.v-enter-from {
  opacity: 0;
}

/* 开始离开的状态 */
.v-leave-from,
/* 进入之后打算变成的状态 */
.v-enter-to {
  opacity: 1;
}

/* 离开过程中做什么 */
.v-leave-active,
/* 进入的过程中做什么 */
.v-enter-active {
  transition: opacity 1s linear;
}

Transition组件的原理

我们会发现,上面演示代码中Vue自动给h3元素添加了动画,这是什么原因呢?

当插入或删除包含在 transition 组件中的元素时, Vue 将会做以下处理

1.自动嗅探目标元素是否应用了CSS过渡或者动画,如果有,那么在恰当的时机添加/删除 CSS类名;

2.如果 transition 组件提供了JavaScript钩子函数,这些钩子函数将在恰当的时机被调用;

3.如果没有找到JavaScript钩子并且也没有检测到CSS过渡/动画, DOM插入、删除操作将会立即执行;

在上面我们简单使用了Vue会自动添加/删除的CSS类名, 接下来我们详细学习一下都有哪些类吧

Vue中如何实现过渡动画效果