Vue Transition 组件详解:让元素动起来

文章目录

  • 一、为什么需要 Transition 组件?
  • 二、核心工作原理
  • 三、基础用法:6个过渡类名
  • 四、进阶用法
  • 五、 JavaScript 钩子函数
  • 六、过渡模式(Mode)
  • 七、列表过渡(TransitionGroup)
  • 八、与第三方动画库结合(如 Animate.css)
  • 九、最佳实践与性能优化
  • 十、Vue3 与 Vue2 的 Transition 组件核心差异
  • 十一、常见问题解决方案

一、为什么需要 Transition 组件?

当元素在 DOM 中插入、更新、移除时, Transition 组件可以:

  1. 实现平滑的 CSS 动画/过渡效果
  2. 自动管理过渡类名的添加与移除
  3. 提供 JavaScript 钩子实现复杂动画
  4. 提升用户体验的流畅感

二、核心工作原理

<transition name='fade'><div v-if='show'>内容</div>
</transition>

流程:

  1. 元素插入时自动添加 v-enter-from -> v-enter-to 类名
  2. 元素移除时自动添加 v-leave-from -> v-leave-to 类名
  3. 根据 CSS 过渡或动画时长自动处理 DOM 操作

三、基础用法:6个过渡类名

假设 <transition name="fade">

类名作用阶段
.fade-enter-from进入动画起始状态
.fade-enter-active进入动画生效时的样式(定义过渡时长/效果)
.fade-enter-to进入动画结束状态
.fade-leave-from离开动画起始状态
.fade-leave-active离开动画生效时的样式
.fade-leave-to离开动画结束状态

示例1:淡出淡入

<template><button @click="show = !show">切换</button><transition name="fade"><div v-if="show" class="box">Hello</div></transition>
</template><style>
.fade-enter-from, .fade-leave-to {opacity: 0;
}
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}
</style>

四、进阶用法

1. 使用 CSS 动画(非过渡)

.fade-enter-active {animation: bounce-in 0.5s;
}
.fade-leave-active {animation: bounce-in 0.5s reverse;
}
@keyframes bounce-in {0% { transform: scale(0); }50% { transform: scale(1.25); }100% { transform: scale(1); }
}

2.自定义过渡时间

<transition :duration="1000">...</transition>  // 统一时长
<transition :duration="{ enter: 500, leave: 800 }">...</transition>  // 分别设置

初始渲染过渡

<transition appear></transition> // 首次加载时触发过渡

五、 JavaScript 钩子函数

实现更复杂的动画逻辑(如结合GSAP)

<transition@before-enter="beforeEnter"@enter="enter"@after-enter="afterEnter"@enter-cancelled="enterCancelled"@before-leave="beforeLeave"@leave="leave"@after-leave="afterLeave”@leave-cancelled="leaveCancelled"
>
</transition><script setup>
// 进入动画
const beforeEnter = (el) => {el.style.opacity = 0;
}const enter = (el, done) => {gsap.to(el, {opacity: 1,duration: 1,onComplete: done // 必须调用 done 来结束过渡})
}
</script>

六、过渡模式(Mode)

解决进入和离开同时发生的冲突

<transition mode="out-in">  //先完成离开动画,再执行进入动画<component :is="view"></component>
</transition>

七、列表过渡(TransitionGroup)

处理 v-for 列表的动画:

<transition-group name="list" tag="ul"><li v-for="item in items" :key="item.id">{{ item.text }}</li>
</transition-group><style>
.list-move {   // 处理列表排序变化的过程transition: transform 0.8s ease;
}
</style>

八、与第三方动画库结合(如 Animate.css)

<transitionenter-active-class="animate__animated animate__data"leave-active-class="animate__animated animate__bounceOut"
><div v-if="show">内容</div>
</transition>

九、最佳实践与性能优化

  1. 优化使用 CSS 过渡:浏览器可优化,性能更好
  2. 避免过渡太多属性:优先使用 transform 和 opacity (可硬件加速)
  3. 设置 :css="false" :当完全使用 JS 动画时,跳过 CSS 类名检测
  4. 合理使用 key:帮助 Vue 正确识别元素
  5. 列表过渡添加 v-move 类:优化排序动画

十、Vue3 与 Vue2 的 Transition 组件核心差异

1.类名命名的变化
Vue3 将 v-enterv-leave 重命名为 v-enter-fromv-leave-from ,使类名语义更清晰(明确表示起始状态)。

2.根元素处理方式的差异

Vue2 的限制:

  • <transition> 组件内必须只有一个根元素
  • 多元素过渡需用<transition-group>

Vue3 的改进:

  • 支持多个根元素,但需要为每个元素添加 key
<!-- Vue3 合法写法 -->
<transition><div v-if="show" key="a">内容A</div><div v-else key="b">内容B</div>
</transition>

3.新增特性:

  • transition 支持作为普通属性传递
    Vue3 允许直接在组件上使用 transition 属性:
<router-view v-solt="{ Component }"><component:is="Component":transition="{ name:'fade', mode:'out-in' }"/>
</router-view>
  • 更智能的过渡持续时间检测
    Vue3 会自动检测 CSS 动画/过渡的实际持续时间,减少手动设置 :duration的需求
  • appear属性的改进
    Vue3 的 appear 支持配置对象
<transitionappear:appear-class="custom-appear-class":appear-active-class="custom-appear-active-class"
>

十一、常见问题解决方案

Q1:过渡效果不生效

  • 检查元素是否应用 v-if / v-show
  • 确认 CSS 类名拼写正确
  • 确保过渡属性在 -active 类中

Q2:列表动画错位

  • <transition-group> 添加 tag 属性(如tag="div"
  • 检查元素是否设置正确的 key

Q3:动画卡顿

  • 使用 will-change: transform 开启硬件加速
  • 简化复杂动画

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

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

相关文章

【Redis】有序集合类型Sortedset 常用命令详解

此类型和 set 一样也是 string 类型元素的集合&#xff0c;且不允许重复的元素 不同的是每个元素都会关联一个double类型的分数&#xff0c;redis正是通过分数来为集合中的成员进行从小到大的排序 有序集合的成员是唯一&#xff0c;但分数(score)却可以重复 1. zadd - 添加 语法…

微信小程序 van-dropdown-menu

点击其他按钮&#xff0c;关闭van-dropdown-menu下拉框 DropdownMenu 引入页面使用index.wxmlindex.scssindex.ts(重点)index.ts(全部) DropdownMenu 引入 在app.json或index.json中引入组件 "usingComponents": {"van-dropdown-menu": "vant/weapp…

C 语言内存分配方法及优缺点

在 C 语言开发中&#xff0c;内存分配的方式主要有三种&#xff1a;静态内存分配、栈内存分配和堆内存分配。每种分配方式都有其独特的特点、适用场景以及优缺点。 静态内存分配 静态内存分配是在编译时就确定好内存的分配&#xff0c;它主要用于定义全局变量和静态局部变量。…

第二大脑-个人知识库

原文链接:https://i68.ltd/notes/posts/20250407-llm-person-kb/ Quivr-第二大脑一样的个人助手&#xff0c;利用AI技术增强个人生产力 将 GenAI 集成到您的应用程序中的个性化 RAG,专注于您的产品而非 RAG项目仓库:https://github.com/QuivrHQ/quivr Star:37.7k官网:https:/…

A. Ambitious Kid

time limit per test 1 second memory limit per test 256 megabytes Chaneka, Pak Chaneks child, is an ambitious kid, so Pak Chanek gives her the following problem to test her ambition. Given an array of integers [A1,A2,A3,…,AN][A1,A2,A3,…,AN]. In one o…

SQL进阶知识:八、性能调优

今天介绍下关于性能调优的详细介绍&#xff0c;并结合MySQL数据库提供实际例子。 性能调优是数据库管理中的一个重要环节&#xff0c;尤其是在处理高并发和大数据量的应用场景时。MySQL提供了多种工具和方法来优化数据库性能。以下是关于MySQL性能调优的详细介绍&#xff0c;以…

NVLink、UALink 崛起,PCIe Gen6 如何用 PAM4 迎战未来?

现在数字经济发展地相当快速&#xff0c;像Cloud、现在火红的AI、大数据这些新技术都需要在数据中心里运行更多运算&#xff0c;伴随而来的是更快的数据传输速度的需求。 在数据中心&#xff0c;有很多条数据传输路径&#xff0c;举例 &#xff1a; Server 和Storage之间&…

Jenkins流水线管理工具

文章目录 前言&#xff1a; DevOps时代的自动化核心 —Jenkins一、Jenkins是什么&#xff1f;二、Linux安装Jenkinswar包方式安装依赖环境下载 Jenkins WAR 包启动 Jenkins 服务启动日志验证配置插件镜像源 docker镜像方式安装依赖环境拉取 Jenkins 镜像运行 Jenkins 容器获取初…

Spring @Transactional 自调用问题深度解析

Spring Transactional 自调用问题深度解析 问题本质&#xff1a;自调用事务失效 当类内部的方法A调用同一个类的另一个带有Transactional注解的方法B时&#xff0c;事务注解不会生效。这是因为Spring的事务管理是基于AOP代理实现的&#xff0c;而自调用会绕过代理机制。 原理…

【爬虫工具】2025微博采集软件,根据搜索关键词批量爬帖子,突破50页限制!

文章目录 一、背景分析1.1 开发背景1.2 软件界面1.3 结果展示1.4 软件说明 二、主要技术2.1 模块分工2.2 部分代码 三、使用介绍3.0 填写cookie3.1 软件登录3.2 采集wb帖子 四、演示视频五、软件首发 本工具仅限学术交流使用&#xff0c;严格遵循相关法律法规&#xff0c;符合平…

java函数式接口与方法引用

函数式接口指的是&#xff0c;一个interface&#xff0c; 只含有一个抽象方法。函数式接口可以加上FunctionalInterface注解&#xff0c;加上这个注解后编译器会检查接口是否满足函数式接口的规范&#xff0c;不满足规范则直接编译不过。 典型的内置函数式接口有Runnable‌、…

uniapp开发04-scroll-view组件的简单案例

uniapp开发04-scroll-view组件的简单案例&#xff01;废话不多说&#xff0c;我们直接上代码分析。 <!--演示scroll-view组件效果--><scroll-view class"scroll" scroll-x><view class"group"><view class"item">111&l…

硬件须知的基本问题1

目录 1. 电路表示中的电压源表示符号有哪些&#xff1f; 2&#xff0e;查找电路表示中的电流源表示符号有哪些&#xff1f; 3&#xff0e;上拉电阻和下拉电阻的作用是什么&#xff1f; 4&#xff0e;0 欧姆电阻在电路中有什么作用&#xff1f; 5&#xff0e;电容的耦合…

Vue回调函数中的this

2025/4/25 向 示例 一个例子——计数器&#xff0c;通过this来操作数据。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

一键快速转换音频视频格式的实用工具

软件介绍 Sundy音视频格式转换工具&#xff0c;支持一键转换音频和视频格式&#xff0c;还可以集成至右键菜单&#xff0c;让操作更加便捷。软件支持MP4、FLV、AVI、MKV、MP3、FLAC等多种格式转换&#xff0c;用户可以根据需求自由选择。 直白版 Sundy音视频格式转换工…

【AI论文】Tina:通过LoRA的微小推理模型

摘要&#xff1a;如何在语言模型中实现成本效益高的强大推理能力&#xff1f; 在这个基本问题的驱动下&#xff0c;我们提出了Tina&#xff0c;这是一个以高成本效益实现的小型推理模型家族。 值得注意的是&#xff0c;Tina 证明了仅使用最少的资源就可以开发出大量的推理性能&…

TC3xx学习笔记-UCB BMHD使用详解(一)

文章目录 前言UCB BMHDPINDISHWCFGLSENA0-3LBISTENACHSWENABMHDIDSTADCRCBMHDCRCBMHD_NPW0-7 总结 前言 AURIX Tc系列Mcu启动过程&#xff0c;必须要了解BMHD&#xff0c;本文详细介绍BMHD的定义及使用过程 UCB BMHD UCB表示User Configuration Block,UCB是Dflash,存储的地址…

H.264/AVC标准主流开源编解码器编译说明

An artisan must first sharpen his tools if he is to do his work well. 工欲善其事,必先利其器. 前言 想研究和学习H.264/AVC视频编解码标准的入门的伙伴们,不论是学术研究还是工程应用都离不开对源码的分析,因此首要工作是对各类编解码器进行编译,本文针对主流的一些符…

Adobe Photoshop(PS)2022 版安装与下载教程

Adobe Photoshop下载安装和使用教程 Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具&#xff0c;可以有效地进行图片编辑和创造工作&#xff0c…

面试新收获-大模型学习

大模型原理 Transformer 架构与自注意力机制 Transformer 是当前大多数大模型采用的核心架构&#xff0c;由编码器-解码器组成&#xff0c;摒弃了传统 RNN 的顺序处理方式。Transformer 中关键在于多头自注意力机制&#xff08;Multi-Head Self-Attention&#xff09;&#xf…