这是我参与更文挑战的第17天,活动详情查看 更文挑战
主要对动画做了一个入门的介绍,如果是初学者可以通过这篇文章快速了动画,同时也可以当做一个开发指南,在忘记动画的某些用法的时,作为参考。
创建一个动画
使用@keyframes规则定义动画,这个规则主要作用是
- 设置动画的名称
- 设置动画的关键帧规则
首先来创建一个名为 myfirst 的动画
@keyframes myfirst {
/*关键帧定义在这里面*/
}
复制代码
在动画中,关键帧是动作发生变化的点,关键帧规则用于在动画循环中的特定点设置属性值。
一个动画至少需要两个关键帧:
- from关键帧,它是我们动画的开始状态,
- to帧,它是它的结束状态。
在每个单独的关键帧块中,我们可以定义要设置动画的属性:
@keyframes myfirst{
from {
background: red;
}
to {
background: blue;
}
}
复制代码
此段代码的是意思是,将我们的对象从红色变成了蓝色。
不过,该keyframes规则仅定义了一个动画。还需要把它绑定到一个选择器,否则动画不会有任何效果。
例:把 “myfirst” 动画捆绑到 div 元素,时长:2 秒:
div
{
animation: myfirst 2s;
}
复制代码
在这里,我们使用animation属性来设置动画名称和持续时间。为了播放动画,我们需要写上@keyframes规则的名称(在本例中为myfirst)和持续时间。其他属性是可选的。
创建多个规则动画:
@keyframes pulse {
from {
transform: scale(0.5);
}
to {
transform: scale(1);
}
}
@keyframes fade {
from {
opacity: .8;
}
to {
opacity: 1;
}
}
复制代码
.pulse-and-fade {
animation: pulse 500ms, fade 500ms;
}
复制代码
此段代码的是意思是,将我们的对象从其大小的一半缩放到其完整大小,并将不透明度从 80% 更改为 100%。
注:上面的也可以不分成多规则,等同于下面这段代码
@keyframes pulse {
from {
transform: scale(0.5);
opacity: .8;
}
to {
transform: scale(1);
opacity: 1;
}
}
.pulse {
animation: pulse 500ms;
}
复制代码
from…to 和 %
关键帧出了用from(0%)…to(100%),还可以使用百分比关键帧创建更复杂的动画,还可以互相组合
@keyframes demo1{
0% {
background: red;
}
50% {
background: blue;
}
100% {
background: green;
}
}
复制代码
@keyframes demo2{
from {
background: red;
}
50% {
background: blue;
}
to {
background: green;
}
}
复制代码
动画属性列表
语法:
animation: name duration timing-function delay iteration-count direction fill-mode play-state;
复制代码
animation-name
@keyframes规则名称
animation-duration
一个动画的周期应该持续多久(负时间值无效)
初始值:0s (没有动画发生)
单位:秒 ( s) 或毫秒 ( ms )
animation-timing-function
性规定动画的速度曲线。
初始值:ease
可选值:
- ease :从慢速开始,然后加快,然后缓慢结束的动画(默认)
- linear : 从开始到结束的速度相同的动画
- ease-in : 慢速开始的动画
- ease-out : 慢速结束的动画
- ease-in-out :指定开始和结束较慢的动画
- cubic-bezier(n,n,n,n) : 运行您在三次贝塞尔函数中定义自己的值
animation-delay
执行动画前等待多长时间(负时间值有效)
初始值:0s (立即执行)
单位:秒 ( s) 或毫秒 ( ms )
animation-iteration-count
动画重复多少次
初始值:1
注:无限次,可以用infinite关键字
.pulse {
animation-name: pulse;
animation-duration: 500ms;
animation-iteration-count: infinite;
}
/*等同于*/
.pulse {
animation: pulse 500ms infinite;
}
复制代码
animation-direction
动画的播放方向
初始值:正向
可选值:
- normal: 动画正常播放(向前)。默认值
- reverse: 翻转from和to状态并反向播放动画
- alternate: 动画先向前播放,然后向后
- alternate-reverse: 动画先向后播放,然后向前
animation-fill-mode
指定动画未运行时应用的属性值
初始值:none
可选值:
- none: 默认值,回到动画没开始时的状态。
- forwards: 让动画停留在结束状态
- backwards:让动画回到第一帧的状态。
- both: 根据animation-direction轮流应用forwards和backwards规则
动画结束以后,会立即从结束状态跳回到起始状态。如果想让动画保持在结束状态,需要使用animation-fill-mode属性。
animation-play-state
动画是运行还是暂停
初始值:running
可选值:
- running
- paused
关于性能(本文暂不展开)
某些属性比其他属性创建性能更好的过渡和动画。
例如,transform: translate(100px,200px))
可以代替top,left,right,和bottom特性。
在某些情况下,height和width动画
可以用替代scale改造
。
小可爱看完就点个赞再走吧!???