首页
技术小册
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.3 多个组件的过渡动画 在Vue.js中,过渡动画不仅限于单个元素的显示与隐藏,更可以扩展到多个组件的切换上,为应用带来流畅且富有吸引力的用户体验。TypeScript与Vue的结合,通过类型系统的支持,使得动画的编写更加严谨和易于维护。本章节将深入探讨如何在Vue项目中使用TypeScript来实现多个组件之间的过渡动画,包括基本的过渡封装、动态过渡名、以及结合Vue Router进行页面级动画的处理。 #### 11.3.3.1 理解Vue的`<transition>`与`<transition-group>` 在Vue中,`<transition>`和`<transition-group>`是实现过渡动画的关键组件。`<transition>`用于包裹单个元素或组件,而`<transition-group>`则用于包裹多个元素或组件,支持列表的过渡动画。`<transition-group>`不仅提供动画效果,还默认以真实DOM节点渲染列表中的每一项,并可以通过`tag`属性指定渲染的根元素类型。 #### 11.3.3.2 使用`<transition-group>`实现多个组件的过渡 当需要在多个组件之间添加过渡效果时,`<transition-group>`是不可或缺的工具。以下是一个简单的例子,展示了如何使用`<transition-group>`为多个Vue组件添加淡入淡出的过渡效果。 首先,定义两个简单的Vue组件`ComponentA`和`ComponentB`,它们可以是任何内容,这里仅作为示例: ```vue <!-- ComponentA.vue --> <template> <div>Component A</div> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ name: 'ComponentA' }); </script> <!-- ComponentB.vue --> <template> <div>Component B</div> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ name: 'ComponentB' }); </script> ``` 然后,在父组件中使用`<transition-group>`包裹这两个组件,并通过`v-if`或`v-show`控制它们的显示: ```vue <template> <div> <button @click="showA = !showA">Toggle Components</button> <transition-group name="fade" tag="div"> <component-a v-if="showA" key="a"></component-a> <component-b v-else key="b"></component-b> </transition-group> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; import ComponentA from './ComponentA.vue'; import ComponentB from './ComponentB.vue'; export default defineComponent({ components: { ComponentA, ComponentB }, setup() { const showA = ref(true); return { showA }; } }); </script> <style scoped> .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter-from, .fade-leave-to { opacity: 0; } </style> ``` 在这个例子中,`<transition-group>`通过`name`属性指定了过渡动画的名称(`fade`),并使用了`tag`属性指定了包裹元素的类型(默认为`span`,但这里改为`div`以适应布局需求)。`v-if`和`v-else`指令用于控制`ComponentA`和`ComponentB`的显示与隐藏,而`key`属性则是必须的,用于Vue跟踪每个节点的身份,从而重用和重新排序现有元素。 #### 11.3.3.3 动态过渡名 在实际应用中,我们可能需要根据不同条件应用不同的过渡效果。Vue允许我们通过绑定`name`属性到动态值来实现这一点。 ```vue <template> <transition-group :name="transitionName" tag="div"> <!-- 组件内容 --> </transition-group> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; export default defineComponent({ setup() { const transitionName = ref('fade'); // 默认过渡名 // 根据某些条件改变transitionName的值 return { transitionName }; } }); </script> ``` 通过这种方式,可以根据应用的当前状态或用户交互来动态改变过渡效果,极大地增强了应用的灵活性和用户体验。 #### 11.3.3.4 结合Vue Router实现页面级过渡动画 在单页面应用(SPA)中,页面之间的导航也是动画应用的一个重要场景。Vue Router提供了`transition`和`beforeEnter`/`beforeLeave`等钩子,允许我们为路由切换添加过渡效果。 然而,Vue Router本身并不直接支持`<transition-group>`,因为它处理的是整个页面的切换,而不是页面内元素的过渡。但我们可以利用`<transition>`包裹`<router-view>`来实现页面级的过渡效果。 ```vue <template> <transition name="page" mode="out-in"> <router-view></router-view> </transition> </template> <style> .page-enter-active, .page-leave-active { transition: opacity 0.5s; } .page-enter-from, .page-leave-to { opacity: 0; } </style> ``` 在这个例子中,我们使用了`<transition>`组件包裹了`<router-view>`,并指定了过渡效果的名称为`page`。`mode="out-in"`确保了新页面在旧页面完全离开后才进入,避免了两者同时存在的尴尬情况。 #### 11.3.3.5 小结 通过`<transition-group>`和Vue Router的`transition`组件,我们可以在Vue应用中实现复杂且流畅的过渡动画,无论是单个元素、多个组件还是整个页面的切换。TypeScript的加入,使得这些动画的编写更加严谨和易于维护。在实际开发中,根据应用的具体需求和设计,合理选择和使用这些工具,可以极大地提升用户体验。 此外,Vue社区还提供了许多第三方库和插件,如`vue-animate-css`、`vue2-animate`等,它们提供了更多预定义的动画效果,可以进一步简化动画的编写工作。开发者可以根据项目需求和个人喜好进行选择和使用。
上一篇:
11.3.2 设置动画过程中的监听回调
下一篇:
11.3.4 列表过渡动画
该分类下的相关小册推荐:
Vue.js从入门到精通(四)
移动端开发指南
Vue.js从入门到精通(一)
TypeScript和Vue从入门到精通(三)
TypeScript和Vue从入门到精通(五)
Vue3技术解密
vuejs组件实例与底层原理精讲
TypeScript和Vue从入门到精通(一)
Vue原理与源码解析
Vue源码完全解析
vue项目构建基础入门与实战
Vue.js从入门到精通(二)