当前位置: 首页 > news >正文

Vue学习计划九:了解Vue动画效果以及过渡动画和动态组件的使用方法

Vue.js 是一个流行的 JavaScript 框架,它提供了很多工具和功能,可以帮助开发人员创建动态、交互式的 Web 应用程序。其中之一就是动画效果,Vue.js 提供了一系列的 API 和指令,使得添加动画效果变得非常容易。

在 Vue.js 中,动画效果主要分为两类:过渡动画和动态组件。

过渡动画

过渡动画是指在元素插入、更新或移除时,Vue.js 自动添加动画效果。Vue.js 提供了两种方式实现过渡动画:使用 CSS 过渡和使用 JavaScript 钩子函数。

CSS 过渡

使用 CSS 过渡可以让元素在插入、更新或移除时,自动添加过渡效果。Vue.js 提供了 transition 组件和 transition-group 组件来实现 CSS 过渡。

transition 组件

transition 组件是用来给单个元素添加过渡效果的。使用 transition 组件时,需要在元素上添加 v-ifv-show 指令来控制元素的显示和隐藏,然后在元素上添加 transition 组件并设置相应的属性。

例如,下面的代码演示了如何给一个 div 元素添加过渡效果:

<template><div><button @click="toggle">Toggle</button><transition name="fade"><p v-if="show">Hello, Vue.js!</p></transition></div>
</template><script>
export default {data() {return {show: false}},methods: {toggle() {this.show = !this.show}}
}
</script><style>
.fade-enter-active, .fade-leave-active {transition: opacity .5s;
}
.fade-enter, .fade-leave-to {opacity: 0;
}
</style>

在上面的代码中,transition 组件包围了一个 p 元素,当 v-if="show" 时,p 元素才会显示。transition 组件通过 name 属性指定了过渡效果的名称,这里使用了 fade。在 style 标签中,我们定义了 fade-enter-activefade-leave-active 类来控制过渡效果的持续时间和属性,同时也定义了 fade-enterfade-leave-to 类来控制过渡前后的状态。

show 的值改变时,p 元素的显示和隐藏就会触发过渡效果。在元素插入时,Vue.js 会自动添加 fade-enter 类,然后在下一帧添加 fade-enter-active 类,这样就会触发过渡效果。在元素移除时,Vue.js 会自动添加 fade-leave-active 类,然后在下一帧添加 fade-leave-to 类,这样也会触发过渡效果。

transition-group 组件

transition-group 组件是用来给多个元素添加过渡效果的。使用 transition-group 组件时,需要在元素上添加 v-for 指令,并设置 key 属性来区分各个元素。然后在 transition-group 组件上添加相应的属性。

例如,下面的代码演示了如何给一个列表添加过渡效果:

<template><div><button @click="add">Add</button><button @click="remove">Remove</button><transition-group name="list" tag="ul"><li v-for="(item, index) in items" :key="index">{{ item }}</li></transition-group></div>
</template><script>
export default {data() {return {items: ['Apple', 'Banana', 'Cherry']}},methods: {add() {this.items.push('Durian')},remove() {this.items.splice(this.items.length - 1, 1)}}
}
</script><style>
.list-enter-active, .list-leave-active {transition: all .5s;
}
.list-enter, .list-leave-to {opacity: 0;transform: translateY(30px);
}
</style>

在上面的代码中,transition-group 组件包围了一个 ul 元素和一个 v-for 循环,每个 li 元素都有一个唯一的 key 属性。在 style 标签中,我们定义了 list-enter-activelist-leave-active 类来控制过渡效果的持续时间和属性,同时也定义了 list-enterlist-leave-to 类来控制过渡前后的状态。

当元素被添加或移除时,Vue.js 会自动添加相应的过渡类,从而触发过渡效果。

JavaScript 钩子函数

除了使用 CSS 过渡外,Vue.js 还提供了 JavaScript 钩子函数,可以让开发人员更加灵活地控制过渡效果。Vue.js 提供了 before-enterenterafter-enterenter-cancelledbefore-leaveleaveafter-leaveleave-cancelled 八个钩子函数,开发人员可以在这些钩子函数中添加自定义的代码来控制过渡效果。

例如,下面的代码演示了如何使用 JavaScript 钩子函数来实现一个自定义的过渡效果:

<template><div><button @click="toggle">Toggle</button><transition @before-enter="beforeEnter"@enter="enter"@after-enter="afterEnter"@before-leave="beforeLeave"@leave="leave"@after-leave="afterLeave"><p v-if="show">Hello, Vue.js!</p></transition></div>
</template><script>
export default {data() {return {show: false}},methods: {toggle() {this.show = !this.show},beforeEnter(el) {el.style.opacity = 0el.style.transform = 'translateY(-30px)'},enter(el, done) {el.offsetWidth // 触发重绘el.style.opacity = 1el.style.transform = ''el.addEventListener('transitionend', done)},afterEnter(el) {console.log('afterEnter')},beforeLeave(el) {el.style.opacity = 1el.style.transform = ''},leave(el, done) {el.style.opacity = 0el.style.transform = 'translateY(-30px)'el.addEventListener('transitionend', done)},afterLeave(el) {console.log('afterLeave')}}
}
</script><style>
p {transition: all .5s;
}
</style>

在上面的代码中,我们使用了 @before-enter@enter@after-enter@before-leave@leave@after-leave 这些钩子函数来控制过渡效果。beforeEnterenterafterEnter 钩子函数用来控制插入时的过渡效果,beforeLeaveleaveafterLeave 钩子函数用来控制移除时的过渡效果。

当元素插入时,Vue.js 会依次触发 before-enterenterafter-enter 钩子函数,当元素移除时,Vue.js 会依次触发 before-leaveleaveafter-leave 钩子函数。

动态组件

动态组件是指在 Vue.js 中可以动态地切换组件的显示和隐藏。使用动态组件可以实现很多有趣的效果,例如实现一个可切换不同页面的单页应用程序。

在 Vue.js 中,使用 <component> 元素来实现动态组件。可以使用 :is 属性来指定当前要显示的组件,同时也可以使用 keep-alive 组件来缓存已经创建的组件。

例如,下面的代码演示了如何使用动态组件来实现一个简单的单页应用程序:

<template><div><nav><ul><li><a href="#" @click.prevent="showPage('home')">Home</a></li><li><a href="#" @click.prevent="showPage('about')">About</a></li><li><a href="#" @click.prevent="showPage('contact')">Contact</a></li></ul></nav><transition mode="out-in" name="fade"><component :is="currentPage" key="currentPage"></component></transition></div>
</template><script>
import HomePage from './HomePage.vue'
import AboutPage from './AboutPage.vue'
import ContactPage from './ContactPage.vue'export default {components: {HomePage,AboutPage,ContactPage},data() {return {currentPage: 'home'}},methods: {showPage(page) {this.currentPage = page}}
}
</script><style>
.fade-enter-active, .fade-leave-active {transition: opacity .5s;
}
.fade-enter, .fade-leave-to {opacity: 0;
}
</style>

在上面的代码中,我们使用了 <component> 元素来实现动态组件,并使用 :is 属性来指定当前要显示的组件。在 nav 元素中,我们添加了三个链接,分别切换到 HomePageAboutPageContactPage 组件。

transition 组件中,我们使用了 mode="out-in" 属性来控制过渡效果的顺序,同时也指定了过渡效果的名称为 fade。在 style 标签中,我们定义了 fade-enter-activefade-leave-active 类来控制过渡效果的持续时间和属性,同时也定义了 fade-enterfade-leave-to 类来控制过渡前后的状态。

当点击链接时,showPage 方法会改变 currentPage 的值,从而触发动态组件的更新。Vue.js 会自动根据新的 currentPage 值来渲染对应的组件,并添加相应的过渡效果。

总结

在 Vue.js 中,动画效果可以让 Web 应用程序变得更加生动、有趣和交互性。Vue.js 提供了丰富的 API 和指令,使得添加动画效果变得非常容易。本文主要介绍了 Vue.js 中的两种动画效果:过渡动画和动态组件,并给出了相应的使用示例。开发人员可以根据自己的需求来选择相应的动画效果,并根据需要自定义相应的样式和行为。

相关文章:

Vue学习计划九:了解Vue动画效果以及过渡动画和动态组件的使用方法

Vue.js 是一个流行的 JavaScript 框架&#xff0c;它提供了很多工具和功能&#xff0c;可以帮助开发人员创建动态、交互式的 Web 应用程序。其中之一就是动画效果&#xff0c;Vue.js 提供了一系列的 API 和指令&#xff0c;使得添加动画效果变得非常容易。 在 Vue.js 中&#…...

【Linux】进程理解与学习Ⅲ-环境变量

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;相关文章推荐&#xff1a;【Linux】冯.诺依曼体系结构与操作系统【Linux】进程理解与学习Ⅰ-进程概念浅谈Linux下的shell--BASH【Linux】进程理解与学习…...

【三】一起算法---栈:STL stack、手写栈、单调栈

纸上得来终觉浅&#xff0c;绝知此事要躬行。大家好&#xff01;我是霜淮子&#xff0c;欢迎订阅我的专栏《算法系列》。 学习经典算法和经典代码&#xff0c;建立算法思维&#xff1b;大量编码让代码成为我们大脑的一部分。 ⭐️已更系列 1、基础数据结构 1.1、链表➡传送门 1…...

电路设计的一些概念

锁存器的产生 论述1 (转)时序电路&#xff0c;生成触发器&#xff0c;触发器是有使能端的&#xff0c;使能端无效时数据不变&#xff0c;这是触发器的特性。 组合逻辑&#xff0c;由于数据要保持不变&#xff0c;只能通过锁存器来保存。 第一个代码&#xff0c;由于是时序逻…...

【Linux】Linux下权限的理解

前言&#xff1a;在之前我们已经对基本的指令进行了深入的学习&#xff0c;接下来我将带领大家学习的是关于权限的相关问题。在之前&#xff0c;我们一直是使用的【root】用户&#xff0c;即为“超级用户”&#xff0c;通过对权限的学习之后&#xff0c;我们就会慢慢的切换到普…...

Prometheus监控实战系列十七:探针监控

目前对于应用程序的监控主要有两种方式&#xff0c;一种被称为白盒监控&#xff0c;它通过获取目标的内部信息指标&#xff0c;来监控目标的状态情况&#xff0c;我们前面介绍的主机监控、容器监控都属于此类监控。另一种则是“黑盒监控”&#xff0c;它指在程序外部通过探针的…...

题目:JPA的懒加载失效是什么情况?

题目&#xff1a;JPA的懒加载失效是什么情况&#xff1f;Q1&#xff1a;什么是JPA的懒加载&#xff1f;Q2&#xff1a;JPA的懒加载会在什么情况下失效&#xff1f;Q3&#xff1a;如何避免JPA的懒加载失效&#xff1f;前言&#xff1a;在使用JPA进行数据库操作时&#xff0c;懒加…...

十六、消息推送

一、什么是消息推送&#xff1f; 消息推送通常是指网站的运营工作等人员&#xff0c;通过某种工具对用户当前网页或移动设备 APP 进行的主动消息推送。 消息推送一般又分为 Web 端消息推送和移动端消息推送。 消息推送无非是推&#xff08;push&#xff09;和拉&#xff08;p…...

PMP项目管理-【第一章】引论

项目知识体系&#xff1a; 项目管理知识体系&#xff1a; 1.1 项目特性 独特性&#xff1a;独特性会带来不确定性(风险) 临时性&#xff1a;1> 任何项目都有起始终止时间 2> 项目具备临时性&#xff0c;项目成果可能是永久的 1.2 项目驱动变革 从商业角度来看&#xff0c…...

前端布局小案例,分享3个漂亮的卡片组件

当今互联网发展迅猛&#xff0c;各种应用、网站和软件层出不穷&#xff0c;其中前端技术的发展更是让人瞩目。随着用户对于界面设计的要求越来越高&#xff0c;漂亮的卡片组件在各类网页设计中变得越来越流行。本文将分享三个精美的卡片组件&#xff0c;帮助您在前端开发中轻松…...

博客重载记录

博客重载记录流控算法实现open系统调用流程二分查找前言&#xff1a; 有时候看了一些比较好的文章&#xff0c;过几天就忘了&#xff0c;想想不如自己实现一遍博客代码或按博客结构自己写一遍&#xff0c;加深印象&#xff0c;但把别人的内容改个名字变成自己的博客&#xff0c…...

open-cv绘制简单形状line() circle() rectangle() polylines() putText() cvtColor()

OpenCV彩色图像中一个像素是按照“B-G-R”模式组织的。 绘图函数的一些公众参数&#xff1a; img &#xff1a;图像对象 color&#xff1a; 颜色&#xff0c;如果彩色用一个三元组表示&#xff0c;三元组的元素按照B-G-R组织&#xff0c;三元组(0,255,0)中B为0&#xff0c;G为2…...

基于 PyTorch + LSTM 进行时间序列预测(附完整源码)

时间序列数据&#xff0c;顾名思义是一种随时间变化的数据类型。 例如&#xff0c;24小时内的温度、一个月内各种产品的价格、某家公司一年内的股票价格等。深度学习模型如长短期记忆网络&#xff08;LSTM&#xff09;能够捕捉时间序列数据中的模式&#xff0c;因此可以用于预…...

GEE页面介绍

目录一、背景二、用户界面三、数据类型&#xff1a;栅格1、请求图像集合2、学习查看栅格元数据3、矢量实例一&#xff1a;四、数据集五、数据属性1、空间分辨率2、时间分辨率六可视化多个波段1、真彩色(TCI)2彩色红外&#xff08;CI&#xff09;3、伪色 1 和 2 (FC1/FC2)七、可…...

python自动发送邮件,qq邮箱、网易邮箱自动发送和回复

在python中&#xff0c;我们可以用程序来实现向别人的邮箱自动发送一封邮件&#xff0c;甚至可以定时&#xff0c;如每天8点钟准时给某人发送一封邮件。今天&#xff0c;我们就来学习一下&#xff0c;如何向qq邮箱&#xff0c;网易邮箱等发送邮件。 一、获取邮箱的SMTP授权码。…...

hastcat

hashcat 下载地址: https://hashcat.net/hashcat/ 案例 Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...https://xz.aliyun.com/t/4008破解linux shadow /etc/shadow中密码格式: $id$salt$encrypted如:$1$2eWq10AC$NaQqalCk3 1表…...

242. 一个简单的整数问题

Powered by:NEFU AB-IN Link 文章目录242. 一个简单的整数问题题意思路代码242. 一个简单的整数问题 题意 给定长度为 N的数列 A&#xff0c;然后输入 M行操作指令。 第一类指令形如 C l r d&#xff0c;表示把数列中第 l∼r个数都加 d 第二类指令形如 Q x&#xff0c;表示询问…...

docker安装Redis高可用(一主二从三哨兵)

本次教程使用docker swarm安装 准备三台机器 hostIP用途node1192.168.31.130redis-master01&#xff0c;redis哨兵节点01node2192.168.31.131redis-slave01, redis哨兵节点02node3192.168.31.132redis-slave02 redis哨兵节点02 注意事项&#xff1a; 1&#xff1a;需要保证三…...

安全防御之入侵检测篇

目录 1.什么是IDS&#xff1f; 2.IDS和防火墙有什么不同&#xff1f;3.IDS的工作原理&#xff1f; 4.IDS的主要检测方法有哪些&#xff1f;请详细说明 5.IDS的部署方式有哪些&#xff1f; 6.IDS的签名是什么意思&#xff1f;签名过滤器有什么用&#xff1f;例外签名的配置作…...

学习系统编程No.10【文件描述符】

引言&#xff1a; 北京时间&#xff1a;2023/3/25&#xff0c;昨天摆烂一天&#xff0c;今天再次坐牢7小时&#xff0c;难受尽在不言中&#xff0c;并且对于笔试题&#xff0c;还是非常的困难&#xff0c;可能是我做题不够多&#xff0c;也可能是没有好好的总结之前做过的一些…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...