自学前端第二十四天:Animation动画栈帧效果
CSS3 帧动画 amimation @keyframes
amimation 是transition过渡的高级升级版
1.为什么要 amimation 一帧一帧的具体动画,因为transition进行单一型动画效果(且hover不点击时则会复原),而amimation@keyframes可以进行复合型(多帧)多运动的动画效果
2.设置了amimation的盒子也是不脱离文档流的,除非变为绝对定位.
3.amimation不会增加元素个数 , 而是可以很多段自定义的时间内让元素完成transform的各种形变而已.(元素还是得提前布置好的)
4.transition只能一次性,而amimation 可以设置播放次数
5
.transition必须是和hover搭配来设置过渡效果的,即鼠标点击就开始过渡变化,否则直接过渡是在平面没变化体现不出的.
而amimation 是在 @keyframes { }上触发设置变化动画效果的,不搭配hover,直接在平面就有一帧一帧的动画效果,可以还可以循环播放和暂停(搭配hover),比transition强大很多,
在 CSS3 出现之前,动画都是通过 JavaScript 动态的改变元素的样式属性来完成了,这种方式虽然能够实现动画,但是在性能上存在一些问题。CSS3 的出现,让动画变得更加容易,性能也更加好。
animation
比较类似于 flash 中的逐帧动画,逐帧动画就像电影的播放一样,表现非常细腻并且有非常大的灵活性。然而transition
只是指定了开始和结束态,整个动画的过程也是由特定的函数控制。学习过 flash 的同学知道,这种逐帧动画是由关键帧组成,很多个关键帧连续的播放就组成了动画,在 CSS3 中是由属性keyframes
来完成逐帧动画的
@keyframes 关键帧
通过@keyframes设置自定义名称的动画关键帧 在动画关键节点设置数值
- animationName:动画名称,开发人员自己命名;
- percentage:为百分比值,可以添加多个百分比值;
- properties:样式属性名称,例如:
color
、left
、width
等等。
@keyframes animationName {from {properties: value;}percentage {properties: value;}to {properties: value;}
}
//or (推荐)
@keyframes animationName {0% {properties: value;}percentage {properties: value;}100% {properties: value;}
}
animation 播放动画
①animation-name(动画名字)
它是用来设置动画的名称,可以同时赋值多个动画名称,用
,
隔开:
.selector {animation-name: none | IDENT[,none | IDENT]*;
}
②animation-duration(持续时间)
它是用来设置动画的持续时间,单位为
s
,默认值为0
:
.selector {animation-duration: <time>[,<time>]*;
}
③animation-timing-function(什么速度形式)
和
transition-timing-function
类似:
.selector {animation-timing-function:ease加速 | linear匀速 | ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>, <number>, <number>);
}
④animation-delay(触发动画开始播放的延时)
它是来设置动画的开始时间,单位是
s
或者ms
,默认值为0:
.selector {animation-delay: <time>[,<time>]*;
}
⑤animation-iteration-count(即动画播放次数,而transition只能一次性)
它是来设置动画循环的次数,默认为
1
,infinite
为无限次数的循环:
.selector {animation-iteration-count: number | infinite
}
⑤animation-direction
它是来设置动画播放的方向,默认值为
normal
表示向前播放,alternate
代表动画播放在第偶数次向前播放,第奇数次向反方向播放::
.selector {animation-direction: normal | alternate [, normal | alternate]*;
}
⑥animation-play-state .(该通常和hover搭配使用,鼠标点击的时候就暂停动画效果)
它主要是来控制动画的播放状态:
running
代表播放,而paused
代表停止播放,running
为默认值:PS: animation-play-state 无法通过animation复合书写 只能单例设置 与 transform-origin 一样
.selector {animation-play-state:running | paused [, running | paused]*;
}
总结animation 复合写法
它是
animation-name
、animation-duration
、animation-timing-function
、animation-delay
、animation-iteration-count
、animation-direction
的简写:
.selector {animation:[<animation-name> || <animation-duration> || <animation-timing-function> || <animation-delay> || <animation-iteration-count> || <animation-direction>] [, [<animation-name> || <animation-duration> || <animation-timing-function> || <animation-delay> || <animation-iteration-count> || <animation-direction>] ]*;
}
.selector {animation: move
}
css3系列之animation
animation
给元素设置动画。
animation呢,得配合@keyframes 使用,具体怎么用呢,先看下面的例子,然后再看参数的设置。
参数:
animation
animation-name
animation-duration
animation-timing-function
animation-delay
animation-iteration-count
animation-direction
animation-play-state
animation-fill-mode
animation-name:
设置要添加上的 哪组动画 名称
其实它也没什么好说,看了上面的例子,就知道怎么用了。
animation-duration:点它→transition-duration
设置完成该动画需要多长的时间,详细说明,请点上面
**animation-timing-function:**点它→transition-timing-function
设置该动画的运动效果
animation-delay:点它→transition-delay
设置延迟时间,延迟多久才执行这个动画
animation-iteration-count:
设置该动画要循环多少次播放(如果设置多个属性值,用逗号隔开)
参数:
1 :默认值。 默认只会执行一次。
infinite:无限循环。
animation-direction:
设置关键帧容器的播放顺序,也就是,我们一般的关键帧容器,是从0% 开始 到 100%,正常方向播放,使用该属性,可以改变他的方向,例如从 100% 往 0% 播放。
参数:
normal:默认值,正常方向
reverse:反方向运动。
alternate:先从正常的方向运动,然后在从反方向运动,并持续交替运动,(也就是,我们设置的次数,必须超过2)
alternate-reverse:跟上面的相反, 先从 反反向运动,然后再从正常方向运动,并持续交替运动
正方向和反方向就不看了,没什么,下面是alternate
animation-play-state:
设置可以暂停,和运动的属性(兼容性还不是很好,在一些场景中会有错误行为 。部分浏览器不支持伪元素动画,或者支持得不够好,尽可能不要利用伪元素来做动画)
参数:
running:默认值,运动
paused:暂停
下面的例子,设置了hover,一hover,就暂停,
animation-fill-mode:
设置,动画的状态吧
参数:
none:默认值。没啥效果
forwards:关键帧容器的 100% 的状态, 就是该动画结束时的样子。
backwards:关键帧容器的 0% 的状态, 就是该动画开始时的样子。
both:也就是上面两个的结合体。 开始和结束都有。
下面的例子,关键帧容器的 动画都是都一样的设置,唯独不一样的地方,就是第二个box2 加上了 animation-fill-mode:forwards 属性
所以,他动画结束后会保留,100%时的 样子。
animation:
上面各属性的简写
animation:run 5s linear (5s设置延迟时间,可以不填) infinite reverse forwards
从第三个参数开始,后面的参数的位置,都是可以随意调位置的,因为他们并没有相同的属性值,所以可以 随便填,不分位置。
[css3系列之animation实现逐帧动画](
上面这个两个简单的动画,是用 animation-timing-function: steps(); 这个属性实现的,具体如何实现,看下面:
这上面的图片,也就是我们的素材,
有些人,可能不是很理解 关键帧容器,和 steps 之间的关系,没关系,看下面的图解
animation综合案例1:做钟表
用到的素材,如上所示。
[](javascript:void(0)😉
<!DOCTYPE html>
<html lang="en">