Vue3的transition标签以及animate.css使用详解

一:前言

        在项目开发中,有一种特殊情况是使用动画过渡去完成某个效果。比如淡入淡出,或者在动画完成后执行某些操作等。在以前开发中我们通常会选择使用 CSS3 进行研发。但是这样会有很多不好的地方,比如最原始化的封装,以及复杂需求下的代码量庞大且冗余。再者就是本可以不使用 CSS 样式的文件又添加了 CSS 文件。这样是很奇怪的。

        因此我们现在在进行动画过渡可以使用别人写好提供给我们的 animate.css 样式。而在 Vue3 开发中,当我们需要在动画过渡前中后或者被中断的时候执行某些 JS 逻辑时,可以使用 transition 标签。接下来,让我们来看一下如何这两个如何使用吧!

二:使用

1、animate.css

        先放上 animate.css 的官网:

Animate.css | A cross-browser library of CSS animations.Animate.css is a library of ready-to-use, cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and attention-guiding hints.icon-default.png?t=N7T8https://animate.style/        进入官网后我们可以在右侧看到有很多动画的样式,随便点击一个样式后,中间的文字会进行相对应的变化。

        引入项目:

  • 首先打开项目,在项目根目录下打开 powershell 
  • 输入 npm install animate.css -S
  • 等待安装成功后,进入你需要使用的页面
  • 在文件内引入:import 'animate.css';
  • 在官网中复制喜欢的样式,放进你需要添加的标签的 class 中
  • 注意,上面这一步需要在复制的前面加上 animate_animated 才可以有效果
<div class="animate__animated animate__bounceOutDown" v-if="isShow">内容</div><script>// 引入animate.cssimport 'animate.css';
</script>

        这时候我们就可以看到效果了。animate.css 的使用是很简单的。

2、transition 标签

        这个标签是内置的,我们直接在 html 中书写即可,我们可以看到代码提示:这代表着,他是有多个接收值的,并且有多个内置方法。知道这些我们就方便写后面的代码了。

1)初始化代码

         这里是我们代码的初始化,代码效果如下图所示:点击按钮显示或者隐藏里面的元素

<template><div class="home"><button @click="isShow = !isShow">切换状态</button><transition><div v-if="isShow" class="content"></div></transition></div>
</template><script lang="ts" setup>
import { ref } from 'vue';const isShow = ref(false)
</script><style scoped>
.content {margin-top: 10px;width: 300px;height: 300px;background: pink;
}
</style>

2)第一种:直接使用变量进行控制

        这种是比较简单的方法,如下面代码所示,我们传了,进入和离开的样式。这样的优点是结合 animate.css 代码行数比较少,且具有较高的阅读性,方便后期修改和维护。但是有一个不好的地方就是,这样只是定义了单纯的动画过渡,如果书写逻辑将会很繁琐,需要定义 ref 等等,这里我就不举例了。因此产生了使用方法控制。

        <transition :duration="500"leave-active-class="animate__animated animate__bounceOutDown"enter-active-class="animate__animated animate__bounceInLeft"><div v-if="isShow" class="content"></div></transition>
3)第二种:使用内置方法进行控制

        代码如下,我们可以看到,这八个内置方法其实是八个生命周期。以进入为例,四个分别是进入前,进入中,进入后,进入中断。这样我们可以在不同的周期中写不同的逻辑,是不是很方便了?

        这里额外注意一下,各个周期中的 el 是接收的这个 element 元素,另外有两个特殊的周期是 enter 和 leave 。这两个的参数中有接收 done 当执行了这个 done 方法后,才会执行 enter-after 声明周期。leave 同理。

<template><div class="home"><button @click="isShow = !isShow">切换状态</button><transition :duration="500"@before-enter="EnterBefore"@enter="EnterActive"@after-enter="EnterTo"@enter-cancelled="EnterCancelled"@before-leave="LeaveForm"@leave="Leave"@after-leave="LeaveTo"@leave-cancelled="LeaveCancell"><div v-if="isShow" class="content"></div></transition></div>
</template><script lang="ts" setup>
import { ref } from 'vue';const isShow = ref(false)const EnterBefore = (el:Element)=>{console.log('进入前');}
const EnterActive = (el:Element,done:Function)=>{console.log('进入中');setTimeout(()=>{done() // 执行完成,要等待三秒钟才会执行下面这个过度完成的方法},3000)
}
const EnterTo = (el:Element)=>{console.log('过度完成');
}
const EnterCancelled = (el:Element)=>{console.log('过渡效果被打断');
}// 离开
const LeaveForm = (el:Element)=>{console.log('离开之前');
}
const Leave = (el:Element,done:Function)=>{console.log('离开过度曲线');setTimeout(()=>{done() // 执行完成,要等待三秒钟才会执行下面这个过度完成的方法},3000)
}
const LeaveTo = (el:Element)=>{console.log('离开完成');
}
const LeaveCancell = (el:Element)=>{console.log('离开被打断');
}
</script>

4)使用 jasp 进行优化
  • 使用 npm i gsap -S 安装jasp
  • 在项目中使用 import jasp from 'gasp' 导入

        项目代码优化如下,我们本次只使用三个生命周期。这时,我们看到的应该是一个在左上角缩放的图,由于没有装转 git 工具,因此这里不放效果 git 图。各位小伙伴可以在项目里 安装 animate 和 gasp 后直接将下面的代码复制进页面即可看到效果。

<template><div class="home"><button @click="isShow = !isShow">切换状态</button><transition :duration="500"@before-enter="EnterBefore"@enter="EnterActive"@leave="Leave"><div v-if="isShow" class="content"></div></transition></div>
</template><script lang="ts" setup>
import { ref } from 'vue';
import gsap from 'gsap' // npm i gsap -Sconst isShow = ref(false)const EnterBefore = (el:Element)=>{console.log('进入前');gsap.set(el,{width:0,height:0})
}
const EnterActive = (el:Element,done:gsap.Callback)=>{console.log('进入中');gsap.to(el,{width:300,height:300,onComplete:done // 加载完成后调用 done 方法})
}// 离开
const Leave = (el:Element,done:gsap.Callback)=>{console.log('离开过度曲线');gsap.to(el,{width:0,height:0,onComplete:done})
}</script><style scoped>
.content {margin-top: 10px;background: pink;
}
</style>

三:结尾

        过渡效果可以说在开发中算是比较重要的一部分。熟练的掌握图像过渡可以更加合理贴切的显示与隐藏,在视觉上给用户更好的体验。并且书写逻辑也方便,可以类似断点的形式去定位问题出现的地方。好啦以上就是本文的全部内容,希望能够对各位小伙伴有所收获哦!

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

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

相关文章

Spring Security 6.x 系列(5)—— Servlet 认证体系结构介绍

一、前言 本章主要学习Spring Security中基于Servlet 的认证体系结构&#xff0c;为后续认证执行流程源码分析打好基础。 二、身份认证机制 Spring Security提供个多种认证方式登录系统&#xff0c;包括&#xff1a; Username and Password&#xff1a;使用用户名/密码 方式…

别做无用功!了解伦敦银交易指标的分类

在伦敦银投资中&#xff0c;我们都喜欢使用技术指标来帮助我们判断市场行情、预测银价点位。其实&#xff0c;伦敦银的技术指标是有不同分类的&#xff0c;我们了解主要的几类&#xff0c;这样在交易中才不至于将相同类型的叠加在一起&#xff0c;这样容易降低决策效率。 分类一…

最强学习辅助工具重磅上市:虚拟与现实互动结合助力学习更快一步

太让人震撼了&#xff01;&#xff01;当当狸这款AR智能学习图集打破了传统历史学习材料壁垒 将AR增强现实技术与诗词互动、历史人文、古典建筑巧妙融合 内容真实有趣&#xff0c;全面激发孩子们的学习探索兴趣 妈妈们都想入手的【教学辅助工具】 有了它&#xff0c;孩子学…

2.3基于springboot养老院管理系统

2.3基于springboot养老院管理系统 成品项目已经更新&#xff01;同学们可以打开链接查看&#xff01;需要定做的及时联系我&#xff01;专业团队定做&#xff01;全程包售后&#xff01; 2000套项目视频链接&#xff1a;https://pan.baidu.com/s/1N4L3zMQ9nNm8nvEVfIR2pg?pwd…

docker-compose Install OrangeHRM

OrangeHRM 前言 OrangeHRM 是一个全面的人力资源管理(HRM) 系统,它包含任何企业所需的所有基本功能。OrangeHRM旨在支持任何规模的团队,包括初创企业、中小企业以及大型跨国组织。 OrangeHRM 提前条件 OrangeHRMdocker & docker-composer 安装or

el-table,列表合并,根据名称列名称相同的品名讲其它列值相同的进行合并

el-table,列表合并,根据名称列名称相同的品名讲其它列值相同的进行合并,并且不能垮品名合并 如图 用到el-table合并行的方法合并 tableSpanMethod({ row, column, rowIndex, columnIndex }) {if (column.property "materielName") {//合并商品名const _row this…

Linux后台运行jar包

Linux后台运行jar包 方式一 命令如下&#xff1a; java -jar /data/tools/jar/demo.jar注&#xff1a;/data/tools/jar&#xff1a;指定jar包所在位置&#xff0c;否则要在jar包所在位置运行改命令&#xff1b;当前ssh窗口被锁定&#xff0c;可按CTRL C打断程序运行&#xf…

小功能实现(十八)生成kml文件

引入依赖 <!--解析、生成kml文件类--><dependency><groupId>de.micromata.jak</groupId><artifactId>JavaAPIforKml</artifactId><version>2.2.0</version></dependency>使用方法 注意&#xff1a;需要什么内容可自行添…

CCC联盟数字钥匙(一)——UWB MAC概述

本文在前面已经介绍了相关UWB的PHY之后&#xff0c;重点介绍数字钥匙&#xff08;Digital Key&#xff09;中关于MAC层的相关实现规范。由于MAC层相应涉及内容比较多&#xff0c;本文首先从介绍UWB MAC的整体框架&#xff0c;后续陆续介绍相关的网络、协议等内容。 1、UWB MAC架…

深入redis过程-命令

目录 通用命令 get set keys exists del expire key seconds ttl type 常用数据结构 String类型 SET GET MSET MGET INCR INCRBY INCRBYFLOAT SETNX SETEX Hash类型 HSET key field value HGET key field HMSET HMGET HGETALL HKEYS HVALS HINCRB…

定制开发办公软件在企业发展中的优势|app小程序网站搭建

定制开发办公软件在企业发展中的优势|app小程序网站搭建 如今&#xff0c;办公软件已经成为企业日常工作的必需品。很多企业为了提高工作效率和满足自身业务需要&#xff0c;选择定制开发办公软件。下面将介绍定制开发办公软件在企业发展中的优势。 首先&#xff0c;定制开发办…

Moonbeam生态项目分析 — — 聚合流动性管理协议GAMMA

流动性激励计划Moonbeam Ignite是帮助用户轻松愉快体验Moonbeam生态的趣味活动。在Moonbeam跨链连接的推动下&#xff0c;DeFi的各种可能性在这里爆发。DeFi或许不热门&#xff0c;但总有机会捡漏&#xff0c;了解Monbeam生态项目&#xff0c;我们邀请Moonbeam大使分享他们的研…

智能AIGC写作系统ChatGPT系统源码+Midjourney绘画+支持GPT-4-Turbo模型+支持GPT-4图片对话

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

便利高效双赢:无人机油气管道巡检全面升级

我国庞大的油气管道网络&#xff0c;包括原油、成品和天然气管道&#xff0c;因为地理区域广泛、建设年代久远、安全事故频发等现实因素&#xff0c;对管道的安全巡护与管理提出了更高的需求。在这一背景下&#xff0c;传统的人工巡护方式显然已经难以满足对高、精、准的要求。…

shell编程系列- bash和sh的区别

文章目录 引言bash和sh的区别CentOS下的区别Ubuntu下的区别 最佳实践 引言 我们在编写shell脚本时&#xff0c;通常第一行都要声明当前脚本的执行程序&#xff0c;也就是常见的 #!/bin/sh 或者是 #!/bin/bash &#xff0c;我们无论用哪一个脚本似乎都可以正常的执行&#xff0…

【数据结构/C++】栈和队列_循环队列

牺牲一个存储单元来判断队满。 #include<iostream> using namespace std; // 循环队列 #define MaxSize 10 typedef int ElemType; typedef struct {ElemType data[MaxSize];int front, rear; } SqQueue; // 初始化队列 void InitQueue(SqQueue &Q) {// 判断队空 Q.…

MySQL数据库入门到大牛_基础_16_变量、流程控制与游标

文章目录 1. 变量1.1 系统变量1.1.1 系统变量分类1.1.2 查看系统变量 1.2 用户变量1.2.1 用户变量分类1.2.2 会话用户变量1.2.3 局部变量1.2.4 对比会话用户变量与局部变量 2. 定义条件与处理程序2.1 案例分析2.2 定义条件2.3 定义处理程序2.4 案例解决 3. 流程控制3.1 分支结构…

四川劳动保障杂志社四川劳动保障编辑部四川劳动保障杂志2023年第10期目录

主题报道 四川抢抓“金九银十”招聘季多措并举稳就业促就业 举措频“上新” 金秋送岗忙 张玉芳; 2-5 法眼《四川劳动保障》投稿&#xff1a;cnqikantg126.com 筑牢长期护理保险基金安全防线 李科仲;赖晓薇; 6-7 调研 提升职业技能培训工作的举措 寇爵; 8-9 城乡…

实战中使用的策略模式,使用@ConditionalOnProperty实现根据环境注册不同的bean

场景复现 举个例子&#xff0c;针对不同的设备的内存的不同加载一些资源的时候需要采取不同的策略&#xff0c;比如&#xff0c;在内存比较大的设备&#xff0c;可以一次性加载&#xff0c;繁殖需要使用懒加载&#xff0c;这个时候我们就可以采用配置文件配置中心去控制了 Cond…

四川开启智能巡河形式,无人机水利行业应用再创新

在四川省某区域&#xff0c;复亚智能无人机系统以其独特的机场网格化部署得到成功应用&#xff0c;覆盖了该区域内多条市级、省级河流&#xff0c;成为水利行业的新亮点。这一先进系统以无人机水利行业应用为核心&#xff0c;通过网格化和信息化手段&#xff0c;实现了对水域环…