首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 11 章 使用动画
11.1 使用CSS 3创建动画
11.1.1 transition过渡动画
11.1.2 keyframes动画
11.2 使用JavaScript的方式实现动画效果
11.3 Vue过渡动画
11.3.1 定义过渡动画
11.3.2 设置动画过程中的监听回调
11.3.3 多个组件的过渡动画
11.3.4 列表过渡动画
11.4 实战:优化用户列表页面
第 12 章 Vue CLI工具的使用
12.1 Vue CLI工具入门
12.1.1 Vue CLI工具的安装
12.1.2 快速创建Vue项目
12.2 Vue CLI项目模板工程
12.2.1 模板工程的目录结构
12.2.2 运行Vue项目工程
12.2.3 vue-class-component库简介
12.3 在项目中使用依赖
12.4 工程构建
12.5 新一代前端构建工具Vite
12.5.1 Vite与Vue CLI
12.5.2 体验Vite构建工具
第 13 章 Element Plus基于Vue 3的UI组件库
13.1 Element Plus入门
13.1.1 Element Plus的安装与使用
13.1.2 按钮组件
13.1.3 标签组件
13.1.4 空态图与加载占位图组件
13.1.5 图片与头像组件
13.2 表单类组件
13.2.1 单选框与多选框
13.2.2 标准输入框组件
13.2.3 带推荐列表的输入框组件
13.2.4 数字输入框
13.2.5 选择列表
13.2.6 多级列表组件
13.3 开关与滑块组件
13.3.1 开关组件
13.3.2 滑块组件
13.4 选择器组件
13.4.1 时间选择器
13.4.2 日期选择器
13.4.3 颜色选择器
13.5 提示类组件
13.5.1 警告组件
13.5.2 消息提示
13.5.3 通知组件
13.6 数据承载相关组件
13.6.1 表格组件
13.6.2 导航组件
13.6.3 标签页组件
13.6.4 抽屉组件
13.6.5 布局容器组件
13.7 实战:教务系统学生表
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(四)
小册名称:TypeScript和Vue从入门到精通(四)
### 11.3.1 定义过渡动画 在Vue.js中,过渡动画(Transitions)是提升用户体验的重要手段之一,它让界面的元素在变化时显得更加平滑和自然。结合TypeScript的强类型特性,我们可以更精确地控制过渡动画的各个方面,确保应用的稳定性和可维护性。本章节将深入探讨如何在Vue.js项目中使用TypeScript来定义和管理过渡动画。 #### 11.3.1.1 理解Vue的过渡系统 Vue的过渡系统通过`<transition>`和`<transition-group>`组件提供了内置的过渡效果。`<transition>`用于单个元素的过渡,而`<transition-group>`则用于多个元素的列表过渡。这些组件封装了CSS过渡、动画和JavaScript钩子函数,使得在元素进入、离开和列表变更时能够添加动画效果。 - **CSS过渡**:通过定义CSS中的`transition`属性来实现简单的过渡效果。 - **CSS动画**:利用`@keyframes`定义复杂的动画序列。 - **JavaScript钩子**:Vue在过渡的各个阶段提供了JavaScript钩子函数(如`beforeEnter`、`enter`、`afterEnter`等),允许我们在动画的特定阶段执行自定义逻辑。 #### 11.3.1.2 使用`<transition>`定义单个元素过渡 在Vue组件中,我们可以使用`<transition>`组件包裹需要添加过渡效果的元素。首先,定义一个基本的`<transition>`结构,并指定一个`name`属性,这个属性将用于生成对应的CSS类名前缀。 ```vue <template> <div> <button @click="show = !show">Toggle</button> <transition name="fade"> <div v-if="show" class="box"> Hello, Vue! </div> </transition> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; export default defineComponent({ setup() { const show = ref(false); return { show }; }, }); </script> <style scoped> .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter-from, .fade-leave-to /* .fade-leave-active in <2.1.8 */ { opacity: 0; } </style> ``` 在这个例子中,我们定义了一个名为`fade`的过渡效果,通过修改`opacity`属性实现淡入淡出效果。注意,在`<style>`标签中使用`scoped`属性可以确保样式只应用于当前组件。 #### 11.3.1.3 使用`<transition-group>`处理列表过渡 当需要为多个元素添加过渡效果时,如列表的展开与收起,可以使用`<transition-group>`组件。`<transition-group>`不仅支持单元素过渡的所有特性,还默认通过`transform`样式来执行位移,以避免在动画过程中重排DOM元素导致的性能问题。 ```vue <template> <div> <button @click="add">Add Item</button> <transition-group name="list" tag="div"> <div v-for="(item, index) in items" :key="index" class="list-item"> {{ item }} </div> </transition-group> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; export default defineComponent({ setup() { const items = ref<string[]>([]); const add = () => { items.value.push(`Item ${items.value.length + 1}`); }; return { items, add }; }, }); </script> <style scoped> .list-enter-active, .list-leave-active { transition: max-height 0.5s ease, opacity 0.5s ease; } .list-enter-from, .list-leave-to /* .list-leave-active in <2.1.8 */ { opacity: 0; max-height: 0; } </style> ``` 在这个例子中,我们创建了一个可以动态添加项目的列表。`<transition-group>`的`name`属性同样用于生成CSS类名前缀,而`tag`属性指定了渲染的真实DOM元素类型(默认为`span`,但在这里我们改为了`div`以便更好地控制样式)。 #### 11.3.1.4 JavaScript钩子与TypeScript Vue的过渡系统还允许我们在过渡的不同阶段通过JavaScript钩子函数执行自定义逻辑。这些钩子函数可以在`<transition>`或`<transition-group>`的`@before-enter`、`@enter`、`@after-enter`等事件上监听,并传入对应的回调函数。 在TypeScript中,这些回调函数需要明确指定参数类型和返回值(如果有的话),以确保类型安全。 ```vue <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter" > <!-- ... --> </transition> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ methods: { beforeEnter(el: HTMLElement) { // 过渡进入之前执行的逻辑 }, enter(el: HTMLElement, done: () => void) { // 当与 CSS 结合使用时,这个函数在 `transitionend` 或 `animationend` 之后调用 // `done` 用于指示过渡的完成 el.style.opacity = 0; el.offsetHeight; // 触发重排 el.style.transition = 'opacity 0.5s'; el.style.opacity = 1; done(); }, afterEnter(el: HTMLElement) { // 过渡进入之后执行的逻辑 }, }, }); </script> ``` 在这个例子中,我们使用了`@before-enter`、`@enter`和`@after-enter`事件来监听过渡的不同阶段,并在`enter`方法中通过修改CSS样式和调用`done`函数来手动控制过渡的完成。注意,TypeScript要求我们明确指定`el`(DOM元素)和`done`(完成过渡的回调函数)的类型。 #### 11.3.1.5 小结 通过本章节的学习,我们深入了解了Vue.js中的过渡动画系统,并学会了如何在TypeScript环境下定义和管理这些动画。无论是使用CSS过渡、CSS动画还是JavaScript钩子,Vue都提供了灵活而强大的工具来帮助我们创建平滑、吸引人的用户界面。通过结合Vue的响应式系统和TypeScript的强类型特性,我们可以构建出既美观又健壮的Web应用。
上一篇:
11.3 Vue过渡动画
下一篇:
11.3.2 设置动画过程中的监听回调
该分类下的相关小册推荐:
TypeScript和Vue从入门到精通(五)
Vue面试指南
Vue3技术解密
移动端开发指南
Vue.js从入门到精通(一)
TypeScript和Vue从入门到精通(三)
Vue.js从入门到精通(二)
Vue原理与源码解析
VUE组件基础与实战
TypeScript和Vue从入门到精通(一)
vue项目构建基础入门与实战
TypeScript和Vue从入门到精通(二)