VUE 过渡和动画的一些区别和个人理解

火星殖民
• 阅读 4613

Vue官方的语言实在令我难以理解,于是自己写了一个demo,才能彻底理解官方文档.我想总结一下

概念:

过渡(Transitions)

运用到了css中的transition属性因此得名(个人理解)

我将过渡(Transitions)分为"出现"和"消失"两大块(动画Animations同理)

Vue将过渡(Transitions)定义了6个class类名,如下:

  1. "出现"
    v-enter : "出现""开始的样子
    v-enter-active : "出现"过程的定义(时间,延迟和曲线函数)
    v-enter-leave : "出现"最后的样子
  2. "消失"
    v-leave: "消失""开始的样子
    v-leave-active : "消失"过程的定义(时间,延迟和曲线函数)
    v-leave-leave : "消失"最后的样子

官方的例子:

//css
.slide-fade-enter-active {
  transition: all .3s ease;
}
.slide-fade-leave-active {
  transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active for below version 2.1.8 */ {
  transform: translateX(10px);
  opacity: 0;
}
//js show默认是false
<div id="example-1">
  <button @click="show = !show">
    Toggle render
  </button>
  <transition name="slide-fade">
    <p v-if="show">hello</p>
  </transition>
</div>

官方的例子中,css只定义了4个过渡css,说好的6个状态呢?我是一脸懵逼,而且动起来还很流畅.

1.缺失的第一个状态:v-enter-leave
过渡"出现"动画结束后,他会展示DOM元素,
官方省略了"v-enter-leave",因为这个DOM元素展示的样子也正是我们"v-enter-leave"想要的效果,因此省略且不会影响动画效果

2.缺失的第二个状态:v-leave
过渡"消失"开始的第一帧也真是我们DOM元素的样子,因此省略且不会影响动画效果

从上面的例子我们也得出了,原来过渡和DOM元素其实是没有什么关系的,我们可以将过渡和DOM出现完全分开.
1."出现"流程走一遍
2.DOM元素出现
3.'消失'流程走一遍
后面提到的动画(Animations)也是此流程

动画(Animations)

运用到了css中的animation属性因此得名(个人理解)

正如官方所说,动画和过渡相同,唯一的区别是:

动画与过渡的区别是在动画中 v-enter 类名在节点插入 DOM 后不会立即删除,而是在 animationend 事件触发时删除

官方代码:

 .bounce-enter-active {
        animation: bounce-in 10s;
    }
    .bounce-leave-active {
        animation: bounce-in 10s reverse;
    }
    @keyframes bounce-in {
        0% {//这里起是就相当于 v-enter
            transform: scale(0);
        }
        50% {
            transform: scale(1.5);
        }
        100% {
            transform: scale(1);
        }
    }

WF??完全不懂,上面的话我理解了很久..在区别中解释这句的理解

区别

1.过渡(Transitions)和动画(Animations)使用的css属性不同
2.动画(Animations)里面的0% 其实就相当于过渡(Transitions)的v-enter,这样就好理解了官方的那句话了,动画(Animations)过程中的0% 在"出现"或者"消失"完毕之后是一直存在的,直到"出现"或"消失"结束后才被去除.

再换一种粗略的说法,过渡(Transitions)的"出现"和"消失"里面的三个类是可以分开一步一步走的,
而动画(Animations)的"出现"和"消失"里面的三个类是不能分开的,同生死的.

如果错误,请多多指教~

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
火星殖民
火星殖民
Lv1
有的东西终究还是要失去,那我宁愿从来都未拥有过。
文章
5
粉丝
0
获赞
0