vue3从精通到入门17:内置组件之Transition和TransitionGroup

Transition

<Transition> 是一个内置组件,它用于在元素或组件的插入、更新和移除时应用过渡效果。Vue 3 的 <Transition> 组件提供了一个声明式的方式来处理这些过渡效果,使开发者能够更容易地添加动画到他们的 Vue 应用中。

基本概念

  1. 包裹内容<Transition> 组件通常包裹一个或多个元素或组件。当这些被包裹的内容的状态(如 v-if 或 v-show 的值)发生变化时,<Transition> 会自动应用过渡效果。

  2. CSS 类名<Transition> 组件在元素或组件的不同过渡阶段自动添加或移除特定的 CSS 类名。这使得开发者可以通过 CSS 定义过渡效果,如渐变、滑动、淡入淡出等。

  3. 过渡模式<Transition> 组件支持多种过渡模式,如 in-out(先进入,后离开)和 out-in(先离开,后进入),通过 mode 属性来设置。

  4. 钩子函数:Vue 提供了 JavaScript 钩子函数,允许开发者在过渡的不同阶段执行自定义逻辑,如手动操作 DOM 或执行动画库的方法。

  5. 列表过渡:除了单个元素或组件的过渡,Vue 3 还支持列表的过渡,通过 <Transition-group> 组件实现。这允许开发者为列表中的每个元素应用过渡效果,同时在列表更新时保持正确的顺序和位置。

使用方法

<template>  
  <button @click="show = !show">Toggle</button>  
  <Transition name="fade">  
    <div v-if="show">Hello, Vue 3!</div>  
  </Transition>  
</template>  
  
<script setup lang="ts">  
import { ref } from 'vue';  
  
const show = ref(true);  
</script>  
  
<style scoped>  
.fade-enter-active, .fade-leave-active {  
  transition: opacity 0.5s;  
}  
.fade-enter, .fade-leave-to {  
  opacity: 0;  
}  
</style>

在上面的例子中,我们定义了一个简单的淡入淡出效果。当 show 的值变化时,<div> 元素会以定义的过渡效果出现或消失。在我们平时实际需求中,可以添加更多的动画效果。

TransitionGroup

基本概念

<TransitionGroup>是一个内置组件,专门用于处理v-for列表中的元素或组件的插入、移除和顺序改变时的动画效果。这个组件在构建动态列表,特别是当列表元素可能频繁添加、删除或重新排序时,特别有用。

<TransitionGroup>组件和<Transition>组件在功能和用法上有很多相似之处,它们支持和使用基本相同的props、CSS过渡class和JavaScript钩子监听器。然而,它们之间也存在一些关键的差异:

  1. 容器元素:默认情况下,<TransitionGroup>不会渲染一个容器元素。这意味着它不会包裹其内部的元素,而是直接让元素保持在其原始的位置。但你可以通过传入tag prop来指定一个元素作为容器元素来渲染。
  2. 过渡模式:在<TransitionGroup>中,过渡模式(如in-outout-in)不可用,因为我们不再是在互斥的元素之间进行切换,而是在列表元素之间进行过渡。
  3. 唯一的key属性:在<TransitionGroup>中,列表中的每个元素都必须有一个独一无二的key attribute。这个key用于跟踪每个节点的身份,从而可以重用和重新排序现有元素。
  4. CSS过渡class:与<Transition>不同,<TransitionGroup>的CSS过渡class会被应用在列表内的元素上,而不是容器元素上。这意味着你可以为列表中的每个元素定义不同的过渡效果。

使用<TransitionGroup>时,你需要将需要过渡的元素放入该组件内部,并使用v-for指令遍历数据列表。然后,你可以通过定义适当的CSS类来定义过渡效果,如元素的进入、离开和移动时的动画效果。

使用方法

对一个 v-for 列表添加进入 / 离开动画的示例:

<TransitionGroup name="list" tag="ul">
  <li v-for="item in items" :key="item">
    {{ item }}
  </li>
</TransitionGroup>
.list-enter-active,
.list-leave-active {
  transition: all 0.5s ease;
}
.list-enter-from,
.list-leave-to {
  opacity: 0;
  transform: translateX(30px);
}

上面的示例有一些明显的缺陷:当某一项被插入或移除时,它周围的元素会立即发生“跳跃”而不是平稳地移动。我们可以通过添加一些额外的 CSS 规则来解决这个问题:

.list-move, /* 对移动中的元素应用的过渡 */
.list-enter-active,
.list-leave-active {
  transition: all 0.5s ease;
}

.list-enter-from,
.list-leave-to {
  opacity: 0;
  transform: translateX(30px);
}

/* 确保将离开的元素从布局流中删除
  以便能够正确地计算移动的动画。 */
.list-leave-active {
  position: absolute;
}

 通过在 JavaScript 钩子中读取元素的 data attribute,我们可以实现带渐进延迟的列表动画。首先,我们把每一个元素的索引渲染为该元素上的一个 data attribute:

<TransitionGroup
  tag="ul"
  :css="false"
  @before-enter="onBeforeEnter"
  @enter="onEnter"
  @leave="onLeave"
>
  <li
    v-for="(item, index) in computedList"
    :key="item.msg"
    :data-index="index"
  >
    {{ item.msg }}
  </li>
</TransitionGroup>

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 是一个流行的 JavaScript 框架,用于构建用户界面。它是 Vue.js 的最新版本,带来了许多新的特性和改进。 要从入门精通 Vue 3,你可以按照以下步骤进行学习: 1. 了解基础概念:首先,你需要了解 Vue 3 的核心概念,如组件、指令、生命周期等。Vue 官方文档是一个很好的起点,你可以在官网上找到详细的文档和教程。 2. 安装 Vue 3:使用 npm 或 yarn 安装 Vue 3,并创建一个新的 Vue 3 项目。你可以使用 Vue CLI,这是一个官方提供的命令行工具,可以帮助你快速搭建 Vue 3 项目。 3. 学习基本语法:学习 Vue 3 的基本语法是入门的关键步骤。掌握如何创建组件、使用模板语法、定义数据和方法等。 4. 理解响应式数据:Vue 3 引入了一个全新的响应式系统,使用 `reactive` 函数来跟踪数据的变化。学习如何使用响应式数据,以及如何在组件中进行状态管理。 5. 掌握组件通信:理解 Vue 3 中组件之间的通信方式,包括 props、自定义事件、provide/inject 等。 6. 学习 Vue 3 的高级特性:学习 Vue 3 中的动态组件、插槽、异步组件等高级特性,可以让你更好地构建复杂的应用程序。 7. 探索 Vue 3 生态系统:Vue 3 生态系统提供了很多有用的库和工具,如 Vue Router、Vuex 等。了解并学习如何使用这些工具,可以帮助你更好地构建应用程序。 8. 实践项目:通过实际项目的练习,将所学的知识应用到实践中。尝试构建一个小型的 Vue 3 应用程序,以加深对 Vue 3 的理解和掌握。 总之,学习 Vue 3 需要持续的实践和不断地学习,通过阅读官方文档、参与社区讨论等方式,你可以逐渐提高自己的技能,并最终精通 Vue 3。祝你学习愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值