vue动画笔记

多路侠
• 阅读 970

背景
内置的<transition>和<transition-group>组件同时支持CSS和JS钩子
过渡和动画的不同:
过渡就是从一个状态向另一个状态插入值(从起始状态,到结束状态,再回来)
动画不同,可以在一个声明中设置多个状态(比如动画50%的位置设置一个关键帧,
然后在70%的位置,也可以设置延迟属性实现复杂运动)
CSS过渡
假设有一个简单的模态窗。通过点击按钮显示或隐藏模态窗。可以这样做:
创建一个按钮的vue实例,在实例中创建一个子组件,设置数据的状态
这样可以通过切换布尔值并添加事件处理实现子组件的显示及隐藏。
可以使用v-if或者v-show来切换组件的可见性。也可以使用slot放置模态窗的切换状态
过渡部分结构:
<transition name="fade">
<app-child v-if="isShowing" class="modal">

<button @click="toggleShow">
  Close
</button>

</app-child>
</transition>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.25s ease-out;
}

.fade-enter, .fade-leave-to {
opacity: 0;
}
CSS动画
所有有趣的动画都是基于enter-active和leave-active
可以给每一个实例一个特殊类
enter-active-class="toasty"
leave-active-class="bounceOut"
动画部分结构:
<transition

name="ballmove"
enter-active-class="bouncein"
leave-active-class="rollout">

<div v-if="isShowing">

<app-child class="child"></app-child>

</div>
</transition>
对于反弹对画,如果使用CSS的话,需要设置大量关键帧,
@mixin ballb($yaxis: 0) {
transform: translate3d(0, $yaxis, 0);
}

@keyframes bouncein {
1% { @include ballb(-400px); }
20%, 40%, 60%, 80%, 95%, 99%, 100% { @include ballb() }
30% { @include ballb(-80px); }
50% { @include ballb(-40px); }
70% { @include ballb(-30px); }
90% { @include ballb(-15px); }
97% { @include ballb(-10px); }
}

.bouncein {
animation: bouncein 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
}

.ballmove-enter {
@include ballb(-400px);
}

@keyframes rollout {
0% { transform: translate3d(0, 300px, 0); }
100% { transform: translate3d(1000px, 300px, 0); }
}

@keyframes ballroll {
0% { transform: rotate(0); }
100% { transform: rotate(1000deg); }
}

.rollout {
width: 60px;
height: 60px;
animation: rollout 2s cubic-bezier(0.55, 0.085, 0.68, 0.53) both;
div {

animation: ballroll 2s cubic-bezier(0.55, 0.085, 0.68, 0.53) both; 

}
}

JS动画
有很多适合动画的易于使用的JS钩子。所有的钩子都会传入el参数,除了动画钩子(enter和leave)
还会传入done作为参数(它的作用就是告知Vue动画结束)
<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
@enter-cancelled="enterCancelled"

@before-Leave="beforeLeave"
@leave="leave"
@after-leave="afterLeave"
@leave-cancelled="leaveCancelled"
:css="false">

</transition>
从最基本的层面看,这是开始动画和结束动画所需的,包括相关的方法:
<transition
@enter="enterEl"
@leave="leaveEl"
:css="false">
<!-- put element here-->
</transition>
methods: {
enterEl(el, done) {

 //entrance animation
 done();

},
leaveEl(el, done) {

//exit animation
done();

},
}

点赞
收藏
评论区
推荐文章
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
VUE 实现一个简易老虎机
今天突然要做一个竖直滚动老虎机,可以设置中奖位置,以及中奖回调,然后再带点常规的滚动动画,还是有点意思,和之前的转盘抽奖有点类似,有兴趣可以看下。简单分析下UI,ui的话,就简单点,三个列表从下往上滚动,搞个框罩住css的活,应该简单。动画,老规矩,我们采用之前的方案,动态设置css,可以搞定。设置中奖位置,我们可以想传递
Chase620 Chase620
4年前
CSS3动画之逐帧动画
CSS3动画开发指南第二弹,剥丝抽茧为你解析逐帧动画,同时放送从实战经验中总结出来的逐帧动画使用技巧。什么是逐帧动画要了解CSS3逐帧动画,首先要明确什么是逐帧动画。看一下维基百科中的定义:定格动画,又名逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果。简而言之,实现逐帧动画需要两个条件:(1)相关联
Wesley13 Wesley13
4年前
Unity 2D角色动画状态切换
一,Idle状态  1,选中角色,打开Animation动画面板;  2,新建一个动画面板Idle;  3,拖动相关角色状态图片,实现动画二,run状态  1,新建一个动画面板run;  2,拖动相关角色状态图片,实现动画三,jump状态  1,新建一个动画面板jump;  2,拖动相关角色状态图片,实现动画四,打开角
Wesley13 Wesley13
4年前
H5实现APP和原生方式有多大差距,多少坑?JS才是王道!
纯H5的APP,虽然开发起来要比纯原生开发畅快的多,但最终效果和性能还是和原生比起来还是有很多问题,主要聚集在以下几个方面:1、动画动画有很多种,比如侧边栏菜单的滑入滑出、元素的响应动画、页面切换之间的过场等等,在H5之下的众多实现方法都没有办法达到纯原生的性能。一般有这几种不同的选择:css3动画,javascript动画,原生动画。cs
Stella981 Stella981
4年前
DragonBonesPro小游戏
1.开场动画首先将素材导入到DragonBones中,然后将各个素材图片移动到合适的位置,然后调整图层上下位置,并在20帧左右插入关键帧然后在0帧放入各素材进入背景时的位置以及时间顺序,最后就是创建补件动画调整各素材的大小变化!(https://oscimg.oschina.net/oscnet/upf664d9444d9254f2
Wesley13 Wesley13
4年前
View动画和Drawable动画
View动画你可以使用view动画系统执行Views的补间动画。补间动画通过诸如起始点,终止点,大小,旋转,和一个动画其他通用的aspects等信息来计算动画。一个补间动画可以在一个View对象的内容上执行一系列简单的变换(位置,大小,旋转,透明度)。因此,如果你有一个TextView(https://www.oschina.net
Wesley13 Wesley13
4年前
Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity2D游戏开发教程之使用脚本实现游戏逻辑使用脚本实现游戏逻辑通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态。但是这其中还有一些问题。例如,我们无法使用键盘控制精灵当前要进入的动画状态,而且精
程序员一鸣 程序员一鸣
8个月前
鸿蒙开发:实现一个超简单的网格拖拽
实现拖拽,最重要的三个方法就是,打开编辑状态editMode,实现onItemDragStart和onItemDrop,设置拖拽移动动画和交换数据,如果想到开启补位动画,还需要实现supportAnimation方法。
程序员一鸣 程序员一鸣
8个月前
鸿蒙开发:走进stateStyles多态样式
stateStyles为多态样式,可以依据组件的内部状态的不同,快速设置不同样式,比如背景颜色,颜色、大小等等常见的通用属性,此种行为,很类似于css中的伪类