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:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯每日一题:鱼塘钓鱼(多路归并)

题目描述&#xff1a; 有 N 个鱼塘排成一排&#xff0c;每个鱼塘中有一定数量的鱼&#xff0c;例如&#xff1a;N5 时&#xff0c;如下表&#xff1a; 鱼塘编号12345第1分钟能钓到的鱼的数量&#xff08;1..1000&#xff09;101420169每钓鱼1分钟钓鱼数的减少量&#xff08;1…

指针的总结

公司面试题 定义&#xff1a; 1.一个整型数&#xff1a;int a; 2.一个指向整型数的指针&#xff1a;int *a 3.一个指向指针的 (指针)&#xff0c;它 (指向的指针) 指向一个整型数:int **a 4.一个有10个整型数的数组 : int a[10]; 5.一个有10个指针的数组&#xff0c;每个…

flutter组件_AlertDialog

官方说明&#xff1a;A Material Design alert dialog. 翻译&#xff1a;一个材料设计警告对话框。 作者释义&#xff1a;显示弹窗&#xff0c;类似于element ui中的Dialog组件。 AlertDialog的定义 const AlertDialog({super.key,this.icon,this.iconPadding,this.iconColor,t…

高阶函数,前端切片处理提升用户体验,代码复制即用

使用范围ALL /*** 高阶函数之数组切片* M楸M 前言* 好处: 解决页面卡顿加载缓慢问题* 常用于渲染真实dom节点数据量大问题* 从根源上去处理这个问题 页面卡顿基本原因是主线程阻塞16.6ms渲染一次* 在16.6毫秒间分段处理* **/ function performChunk(data, taskHandler, schedu…

边缘计算平台原理、关键功能以及技术优势

1、什么是边缘计算及其工作原理&#xff1f; 边缘计算是一种分布式计算模型&#xff0c;它将数据处理和存储靠近数据源头和最终用户的边缘设备上&#xff0c;从而减少了数据传输和延迟。边缘计算旨在解决云计算模型所面临的问题&#xff0c;例如延迟高、带宽瓶颈和安全性等问题…

【前端性能优化】使用惰性函数减少无意义的重复判断

什么是惰性函数&#xff1f; 惰性函数表示函数执行的分支只会在函数第一次调用的时候执行&#xff0c;在第一次调用过程中&#xff0c;该函数会被覆盖为另一个按照合适方式执行的函数&#xff0c;这样任何对原函数的调用就不用再经过执行的分支了。 惰性函数的本质就是函数重…

【JavaWeb】Day38.MySQL概述——数据库设计-DQL(一)

数据库设计——DQL 介绍 DQL英文全称是Data Query Language(数据查询语言)&#xff0c;用来查询数据库表中的记录。 查询关键字&#xff1a;SELECT 查询操作是所有SQL语句当中最为常见&#xff0c;也是最为重要的操作。在一个正常的业务系统中&#xff0c;查询操作的使用频次…

Python实现BOA蝴蝶优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…

synchronized用于静态方法与普通方法有区别吗?

Synchronized 关键字在 Java 中用于实现线程同步&#xff0c;确保在多线程环境下对共享资源的访问是安全的。当应用于方法时&#xff0c;它可以用于静态方法和普通方法&#xff0c;但二者之间确实存在一些区别。 锁的对象不同&#xff1a; 对于普通方法&#xff0c;锁的对象是调…

3.13 Python位运算符

Python位运算符详解 Python位运算按照数据在内存中的二进制位&#xff08;Bit&#xff09;进行操作&#xff0c;它一般用于底层开发&#xff08;算法设计、驱动、图像处理、单片机等&#xff09;&#xff0c;在应用层开发&#xff08;Web 开发、Linux 运维等&#xff09;中并不…

神经网络训练中batch的作用

在神经网络训练中&#xff0c;batch的作用主要包括以下几个方面&#xff1a; 减少内存占用和计算成本&#xff1a;在训练神经网络时&#xff0c;需要加载并处理大量的数据。使用batch训练可以将数据分成较小的批次&#xff0c;每次处理一小部分数据&#xff0c;从而减少内存占用…

数据库讲解---(SQL语句--练习题讲解)【MySQL版本】

目录 零.前言 一.例题一 1.1查询姓刘的老师所授课程的课程号和课程名 1.2查询年龄大于23岁的男同学的学号和姓名 1.3查询学号为S3的学生所学课程的课程号、课程名和任课教师姓名 1.4查询“张小飞”没有选修的课程号和课程名 1.5查询至少选修了三门课程的学生的学号和姓名…

cmake + mingw32构建和编译第三方lib库, qt 使用lib库

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 背景 qt 有两种编译器&#xff0c;分别是visual studio和MinGW。很多第三方库提供编译好的visual studio 库&#xff0c;MinGW库需要自己编译。喜欢MinGW没有太多版本…

Python的时间和日期:探索datetime模块

&#x1f680; 个人主页&#xff1a;xmp65535 &#x1f680; 专栏&#xff1a;python技术专栏 目录 一、前言 二、datetime 模块简介 三、基本使用 1.日期和时间的创建 2.获取当前日期和时间 3.时间戳与日期时间之间的转换 4.时间运算 5.格式化日期和时间 6.解析字符串…

vs2022启动cmake项目(qt+c++)

1.本工程&#xff0c;如图&#xff0c;1个cmakelist.txt3个文件 2.启动vs 3.选择文件夹 4.进入这个页面&#xff0c;就说明配置没问题 5.启动 6.最后会自己生成其他文件

Proteus 8 的使用记录

创建仿真文件 新建文件&#xff1a;默认下一步&#xff0c;至完成创建。 功能选择如图&#xff1a; 放置器件 常用元器件名称 keywords 常用51单片机 AT89C52 晶振 CRYSTAL 电阻 RES 排阻 RESPACK-8 瓷片电容 CAP 电解电容 CAP-ELEC 单刀单掷开关 S…

网络协议学习——以太网协议

目录 ​编辑 一&#xff0c;以太网简介 二&#xff0c;以太网通信的过程 为什么不用IP地址&#xff1f; 过程 MAC帧 MAC帧的字段介绍 ARP协议 传输过程的一些问题 RARP协议 提高效率 三&#xff0c;其他问题 ARP诈骗问题 URL解析过程 一&#xff0c;以太网简介 …

python图书馆图书借阅系统含网上商城管理系统7d538

&#xff0c;python语言&#xff0c;django框架进行开发&#xff0c;后台使用MySQL数据库进行信息管理&#xff0c;设计开发的图书管理系统。通过调研和分析&#xff0c;系统拥有管理员和用户两个角色&#xff0c;主要具备注册登录、个人信息修改、用户、图书分类、图书信息、借…

Django交易商场

Hello&#xff0c;我是小恒不会java 最近学习django&#xff0c;写了一个demo,学到了不少东西。 我在GitHub上开源了&#xff0c;提示‘自行查看代码&#xff0c;维护&#xff0c;运行’。 最近有事&#xff0c;先发布代码了&#xff0c;我就随缘维护更新吧 介绍&#xff1a; 定…

构建智能生态:详解同城O2O外卖跑腿APP的开发技术

同城O2O外卖跑腿APP作为这一新型服务的代表&#xff0c;其开发技术成为了当下技术界的热点之一。小编将深入讲解同城O2O外卖跑腿APP的开发技术&#xff0c;以期为开发者提供一些有益的参考和指导。 需求分析与功能设计 在开发同城O2O外卖跑腿APP之前&#xff0c;首先需要进行充…