技术标签: vue如何使用原生js写动画效果
一、基本介绍
1, 组件
(1)如果某个元素或者组件需要使用过渡动画效果,只需使用 vue提供的 组件将其包裹起来封装成过渡组件。
(2)Vue只有在插入,更新或者移除 DOM元素时才会应用过渡效果,例如:
v-if(条件渲染)
v-show(条件展示)
动态组件
在组件的根节点上,并且被 vue实例 DOM方法触发。比如使用 appendTo方法把组件添加到某个根节点上
2,过渡效果实现方式
过渡效果具体的实现方式分为如下两种:
利用 CSS过渡或者动画来实现
利用 JavaScript钩子函数来实现
3,动画执行逻辑
封装成过渡组件的元素被插入或者删除时,vue将会做如下事情:
首先查找目标元素是否有 CSS过渡或者动画,如果有就在适当的时候进行处理。
如果过渡组件设置了 JavaScript钩子函数,vue会在相应阶段调用钩子函数。
如果以上两者都没有,DOM操作(插入或者删除)就在下一帧立即执行。
二、结合 CSS 实现动画效果
1,基本用法
(1)我们给 transition的 name属性设置一个值(比如:name="xxx"),那么在组件过渡过程中,会有如下六个 CSS类名进行切换:
xxx-enter:进入过渡的开始状态,元素被插入时生效,只应用一帧后立刻删除。
xxx-enter-active:进入过渡的结束状态,元素被插入时就生效,在过渡过程完成后移除。
xxx-enter-to:定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 xxx-enter被移除),在过渡/动画完成之后移除。(2.1.8版加入)
xxx-leave:离开过渡的开始状态,元素被删除时触发,只应用一帧后立刻删除。
xxx-leave-active:离开过渡的结束状态,元素被删除时生效,离开过渡完成后被删除。
xxx-leave-to:定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时xxx-leave 被删除),在过渡/动画完成之后移除。(2.1.8版加入)
(2)下面是一个简单的样例:
通过点击按钮对下方图片进行显示或隐藏(交替)。
在显示或隐藏的过程中,会有淡入淡出的效果。
显示/隐藏
export default {
name: 'App',
data: function(){
return {
show: true
}
}
}
.fade-enter-active, .fade-leave-active{
transition: all 0.5s ease
}
.fade-enter, .fade-leave-active {
opacity: 0
}
2,自定义过渡类名
(1)前面的样例中六个过渡类名都是根据 transition的 name属性自动生成的,我们也可以通过 enter-class、enter-active-class、enter-to-class、leave-class、leave-active-class、leave-to-class这六个属性来分别定义这六个类名。
enter-class="fade-in-enter"
enter-active-class="fade-in-active"
enter-to-class="fad-in-end"
leave-class="fade-out-enter"
leave-active-class="fade-out-active"
leave-to-class="fade-out-end">
(2)自定义过渡类名的优先级高于普通的类名,这对于 Vue的过渡系统和其他第三方 CSS动画库,如 Animate.css 结合使用十分有用。
Toggle render
name="custom-classes-transition"
enter-active-class="animated tada"
leave-active-class="animated bounceOutRight"
>
hello
3,通过 CSS 动画(animation)实现过渡效果
组件过渡效果不但可以通过 CSS过渡实现,还可以通过 CSS动画(关键帧动画)实现。
(1)效果图
通过点击按钮让下方图片进行显示或隐藏(交替)。
在显示或隐藏的过程中,图片除了会有淡入淡出的效果,还会左右摇摆逐渐放大(或逐渐缩小)
(2)样例代码
显示/隐藏
export default {
name: 'App',
data: function(){
return {
show: true
}
}
}
.fold-enter-active {
animation-name: fold-in;
animation-duration: .5s;
}
.fold-leave-active {
animation-name: fold-out;
animation-duration: 5.5s;
}
@keyframes fold-in {
0% {
opacity: 0;
transform: scale(0.7) rotate(0deg);
}
33% {
opacity: 0.33;
transform: scale(0.8) rotate(5deg);
}
67% {
opacity: 0.67;
transform: scale(0.9) rotate(-5deg);
}
100% {
opacity: 1.0;
transform: scale(1.0) rotate(0deg);
}
}
@keyframes fold-out {
0% {
opacity: 1.0;
transform: scale(1.0) rotate(0deg);
}
33% {
opacity: 0.67;
transform: scale(0.9) rotate(-5deg);
}
67% {
opacity: 0.33;
transform: scale(0.8) rotate(5deg);
}
100% {
opacity: 0;
transform: scale(0.7) rotate(0deg);
}
}
4,显示地指定过渡持续时间
指定显性的过渡持续时间的作用:
(1)在很多情况下,Vue会自动得出过渡效果的完成时机。默认情况下,Vue会等待其在过渡效果的根元素的第一个 transitionend或 animationend事件。
(2)然而也可以不这样设定——比如,我们可以拥有一个精心编排的一系列过渡效果,其中一些嵌套的内部元素相比于过渡效果的根元素有延迟的或更长的过渡效果。
(1)我们可以用 组件上的 duration属性定制一个显性的过渡持续时间 (以毫秒计):
...
(2)也可以分别指定进入和移出的持续时间:
...
附:初始渲染的过渡
(1)我们可以通过 appear特性设置节点在初始渲染的过渡
(2)这里默认和进入/离开过渡一样,同样也可以自定义 CSS 类名。
appear
appear-class="custom-appear-class"
appear-to-class="custom-appear-to-class" (2.1.8+)
appear-active-class="custom-appear-active-class"
>
文章浏览阅读6.4k次,点赞2次,收藏6次。element ui输入框 placeholder字体样式修改.el-input input::-webkit-input-placeholder { color:#AEABAB;}.el-input input::-moz-input-placeholder { color: #AEABAB;}.el-input input::-ms-input-placeholder { color:#AEABAB;}_vue中修改elementui中placeholder的字体样式
文章浏览阅读348次,点赞7次,收藏9次。系统实现:根据用户现场要求,每台 BX-602-PN 连接一台客户测距仪器,BX-602-PN 的 Profinet 端接入Profinet 总线网络,RS232 端口与测距仪的 RS232 端口连接(按照面板或者说明书指示接线),然后将测距仪的运行参数数据通过 BX-602-PN 映射到 S7-400PLC 的输入输出映射区,实现客户一台 PLC对现场 10 台测距仪设备的实时监控。应用简单,可在短时间内实现连接通信,该模块的串行口通信端口是完全透明的,不带任何协议,用户可以依照实际情况应用。_串口转profinet模块
文章浏览阅读2.2k次。1.首先去腾讯云或者阿里云申请免费ssl证书,以腾讯云为例,不建议自己生成,因为没办法测试发布环境的效果,填写个人信息,最后提示审核中才是申请成功,审核比较快,半小时就通过了。2.下载已经通过审核的证书文件夹,解压文件如下,根据项目选择使用,3.因为springboot使用的是内置tomcat,所以我这边选择tomcat文件,在resources目录下导入xxx.jks4.接下来配置properties文件,密码在同文件夹的keystorePass.txt中(腾讯云)5.个人比较喜欢yml格_connector.setredirectport
文章浏览阅读262次。template 函数模板定义关键字 用来定义函数参数的类型,参数类型有一个或多个,用逗号隔开,不能为空;模板参数表中,class\typename 没有任何区别,都是类型表示符号,可以随意替换。template > < 返回值类型 > < 函数名 >(< 参数表 >) {< 函数表 > }a = b;b = tmp;}
文章浏览阅读469次,点赞13次,收藏7次。OA是公司最常用的管理系统之一,难度系数 也不高,国内成熟的产品非常多,面对琳琅满目的产品该如何选择呢?本文为您解密。
文章浏览阅读2.8k次。如果您的系统上尚未安装,请安装ROS。一行代码安装ROS的方法另一篇博文已经写过了点击此处我装的版本是ros的noetic,对应ubuntu20.04我们建议专门为模拟器创建一个新的 catkin 工作空间,如下所示:mkdir -p ~/sim_ws/src && cd ~/sim_wscatkin initcatkin config --extend /opt/ros/kinetic --cmake-args -DCMAKE_BUILD_TYPE=Releasevcsto_failed << catkin_tools_prebuild:cmake [ exited with code 1 ]
文章浏览阅读1.5k次。我们购买电脑整机后,开机就可以使用,但是磁盘分区数目以及设置的大小都是默认的,有时候默认分区的不合理,或者并不是你想要的大小,这就需要我们自己来进行分区了,那么电脑分区要怎么分的合理呢,下面小编给大家分享电脑分区分的合理的方法步骤。解决方法:1、首先,其中的主分区是能够安装操作系统,可写入计算机启动文件的分区。可以直接格式化,安装系统,存放文件。建议电脑硬盘分区最适宜的是分两个区,系统盘分比较大一..._电脑分区怎么分合理c,d,e,f
文章浏览阅读2.8k次。1.根据官方文档仅有的部分内容,可知,不管是折线图,柱状图还是饼图,数据都要使用它规定的数据格式才可以。下面开始写我所用到的图表1.双Y轴双折线图的写法效果://注意部分:数据带有双引号,Y轴上不会从小到大排列const app = getApp()let chart = null;function initChart(canvas, width, height,) { // 使用 F2 绘制图表 const data =[{time:'07:00:00--07:59:69', kdj:2_f2-canvas y轴
文章浏览阅读88次。springboot基于微信小程序的贵州美食推荐平台设计与实现。springboot基于Springboot的项目管理系统。springboot基于springboot的垃圾回收系统。springboot基于Vuejs的中国名茶销售平台。springboot巴黎奥运会论坛系统的设计与实现。springboot地产项目管控平台的设计与实现。springboot微信小程序的灾情救助共享系统。springboot基于小程序的微型教务系统。ssm基于web的暗香小店系统的设计与实现。
文章浏览阅读3.5k次。社交网络算法在金融反欺诈中的应用互联网金融服务面临的欺诈风险社交网络算法在金融反欺诈中的应用 自动化风控系统架构互联网和金融的结晶金融的本质:资源的最合理化应用 互联网技术:交易的边界成本趋向“零”互联网金融:用大数据、云计算等技术实现的资金融通 、支付、投资和信息中介服务 个人对个人的信用贷款极速信任-自动化信用评估客户获取 –&gt; 信用评估...
文章浏览阅读2.4w次,点赞2次,收藏47次。zabbix4.0学习六:Zabbix监控日志前言我们希望监控日志,在日志出现特定标识或字符串时打印出日志,并邮件通知我们,以便我们手动处理。(当然使用动作可自动处理)。zabbix能收集指定文件里的信息并展示出来。原理原理也很简单,zabbix-agent就是通过搜索指定文本文件里内容,通过正则表达式匹配关键字,如果匹配成功,则把该行信息主动发送给zabbix-server。由些延伸出..._zabbix eventlog
文章浏览阅读8.9k次,点赞36次,收藏266次。package com.myth;import javax.swing.JButton;import javax.swing.JFrame;public class JFrameExample1 { public static void main(String[] args) { // 主窗体 JFrame frmMain = new JFrame..._jdk swing实例