注意:为代码看上去简洁,本文实例中都忽略了前缀,而在实际使用中需加上。
1. 前言
(1)背景
实践当中,很多复杂的动画,一般不要求我们用CSS3变形的方式画出来,而是采用一帧一帧连续播放静态的图片的方式形成动画。
(2)实例
例如让下面图片中的小女孩跑起来。
(图片出处:http://www.zcool.com.cn/work/ZMjE3OTQyMzY=.html,仅用于demo素材,不商用,如有侵权,请及时联系)
2. animation
(1) animation简介
内容参考 http://www.css88.com/book/css/properties/animation/index.htm
animation是个复合属性。检索或设置对象所应用的动画特效。如果提供多组属性值,以逗号进行分隔。
它有如下取值:
<' animation-name '>
:检索或设置对象所应用的动画名称
<' animation-duration '>
:检索或设置对象动画的持续时间
<' animation-timing-function '>
:检索或设置对象动画的过渡类型
<' animation-delay '>
:检索或设置对象动画延迟的时间
<' animation-iteration-count '>
:检索或设置对象动画的循环次数
<' animation-direction '>
:检索或设置对象动画在循环中是否反向运动
<' animation-fill-mode '>
:检索或设置对象动画时间之外的状态
<' animation-play-state '>
:检索或设置对象动画的状态。w3c正考虑是否将该属性移除,因为动画的状态可以通过其它的方式实现,比如重设样式
[1] animation-name
检索或设置对象所应用的动画名称,必须与规则@keyframes配合使用,因为动画名称由@keyframes定义
[2] animation-timing-function
linear
:线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
ease
:平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)
ease-in
:由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)
ease-out
:由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)
ease-in-out
:由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)
step-start
:等同于 steps(1, start)
step-end
:等同于 steps(1, end)
steps(<integer>[, [ start | end ] ]?)
:接受两个参数的步进函数。第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是start或end,指定每一步的值发生变化的时间点。第二个参数是可选的,默认值为end。
cubic-bezier(<number>, <number>, <number>, <number>)
:特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内
[3] animation-iteration-count
infinite
: 无限循环
<number>
: 指定对象动画的具体循环次数
[4] animation-direction
normal
:正常方向
reverse
:反方向运行
alternate
:动画先正常运行再反方向运行,并持续交替运行
alternate-reverse
:动画先反运行再正方向运行,并持续交替运行
[5] animation-fill-mode
即动画完成时,是显示动画开始的状态还是结束时的状态。
none
:默认值。不设置对象动画之外的状态
forwards
:设置对象状态为动画结束时的状态
backwards
:设置对象状态为动画开始时的状态
both
:设置对象状态为动画结束或开始的状态
这个地方需要特别注意的是,如果steps(1,end)
这样的模式,按照下文所讲,100%处可以为空,不影响动画,但是如果animation-fill-mode设置为forwards
时,动画完毕显示的是最后一帧就会出问题。这时需要设置最后两个区间为一样的效果。
[6] animation-play-state
running
:运动
paused
:暂停
(2) 帧动画
[1] 线性动画与帧动画对比
平时我们接触的是线性动画,例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset=