# css动画 ### animation CSS animation属性是如下属性的一个简写属性形式:
animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction 和 animation-fill-mode. ```css /* @keyframes duration | timing-function | delay | iteration-count | direction | fill-mode | play-state | name */ animation: 3s ease-in 1s 2 reverse both paused slidein; /* @keyframes duration | timing-function | delay | name */ animation: 3s linear 1s slidein; /* @keyframes duration | name */ animation: 3s slidein; ``` ### animation-delay 定义: ``` CSS属性定义动画于何时开始,即从动画应用在元素上到动画开始的这段时间的长度。 ``` 语法: ```css animation-delay: 3s; animation-delay: 2s, 4ms; ``` ### animation-direction 定义: ``` CSS 属性指示动画是否反向播放,它通常在简写属性animation中设定 ``` 语法: ```css animation-direction: normal animation-direction: reverse animation-direction: alternate animation-direction: alternate-reverse animation-direction: normal, reverse animation-direction: alternate, reverse, normal ``` |属性|作用| |:-|-| |normal|每个循环内动画向前循环,换言之,每个动画循环结束,动画重置到起点重新开始,这是默认属性。| |alternate|动画交替反向运行,反向运行时,动画按步后退,同时,带时间功能的函数也反向,比如,ease-in 在反向时成为ease-out。计数取决于开始时是奇数迭代还是偶数迭代| |reverse |反向运行动画,每周期结束动画由尾到头运行。| |alternate-reverse|反向交替, 反向开始交替;动画第一次运行时是反向的,然后下一次是正向,后面依次循环。决定奇数次或偶数次的计数从1开始。| ### animation-duration 定义: ``` 属性指定一个动画周期的时长。 ``` 语法: ```css animation-duration: 6s animation-duration: 120ms animation-duration: 1s, 15s animation-duration: 10s, 30s, 230ms ``` |属性|作用| |:-|-| |time|一个动画周期的时长,单位为秒(s)或者毫秒(ms),无单位值无效。| ### animation-fill-mode 定义: ``` 这个 CSS 属性用来指定在动画执行之前和之后如何给动画的目标应用样式。 ``` 语法 ```css /* = none | forwards | backwards | both */ animation-fill-mode: none animation-fill-mode: forwards animation-fill-mode: backwards animation-fill-mode: both /* 可以应用多个参数,这个时候使用逗号隔开 */ /* 各个参数应用于与次序相对应的动画名 */ animation-fill-mode: none, backwards animation-fill-mode: both, forwards, none ``` >none
动画执行前后不改变任何样式 >forwards
目标保持动画最后一帧的样式,最后一帧是哪个取决于animation-direction和 animation-iteration-count: |animation-direction|animation-iteration-count|last keyframe encountered| |:---------------:|:---------:|:--------:| |normal |even or odd|100% or to| |reverse |even or odd|0% or from| |alternate |even |0% or from| |alternate |odd |100% or to| |alternate-reverse|even |100% or to| |alternate-reverse|odd |0% or from| >backwards
动画采用相应第一帧的样式,保持 animation-delay,第一帧取法如下: |animation-direction|first relevant keyframe| |:-|:-:| |normal or alternate | 0% or from | |reverse or alternate-reverse | 100% or to | >both
动画将会执行 forwards 和 backwards 执行的动作。 animation-iteration-count 定义: ``` CSS 属性 定义动画在结束前运行的次数 可以是1次 无限循环. 默认属性 animation 默认播放动画循环一次. ``` 语法: ```css /* 使用规范 = infinite | */ animation-iteration-count: infinite; animation-iteration-count: 3; animation-iteration-count: 2.3; animation-iteration-count: 2, 0, infinite; ``` ### animation-name 定义 ``` 属性指定应用的一系列动画,每个名称代表一个由@keyframes定义的动画序列。 ``` ```css /* Single animation */ animation-name: none; animation-name: test_05; animation-name: -specific; animation-name: sliding-vertically; /* Multiple animations */ animation-name: test1, animation4; animation-name: none, -moz-specific, sliding; /* Global values */ animation-name: initial animation-name: inherit animation-name: unset ``` ### animation-play-state 定义: ``` CSS 属性定义一个动画是否运行或者暂停。 可以通过查询它来确定动画是否正在运行。 另外,它的值可以被设置为暂停和恢复的动画的重放。 恢复一个已暂停的动画,将从它开始暂停的时候,而不是从动画序列的起点开始在动画。 ``` 语法 ```css /* 正式语法 => = running | paused */ /* Single animation=>单一动画 */ animation-play-state: running; animation-play-state: paused; /* Multiple animations=>多个动画 */ animation-play-state: paused, running, running; /* Global values=>全球价值 */ animation-play-state: inherited; animation-play-state: initial; animation-play-state: unset; ``` |属性|注释| |:-|-| |running|当前动画正在运行。| |paused|当前动画以被停止。| ### animation-timing-function 属性 ``` 定义CSS动画在每一动画周期中执行的节奏。 可能值为一或多个 。 对于关键帧动画来说,timing function作用于一个关键帧周期而非整个动画周期, 即从关键帧开始开始,到关键帧结束结束。 定义于一个关键帧区块的缓动函数(animation timing function)应用到改关键帧; 另外,若该关键帧没有定义缓动函数,则使用定义于整个动画的缓动函数。 ``` 示例 ```css /* Keyword values */ animation-timing-function: ease; animation-timing-function: ease-in; animation-timing-function: ease-out; animation-timing-function: ease-in-out; animation-timing-function: linear; animation-timing-function: step-start; animation-timing-function: step-end; /* Function values */ animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1); animation-timing-function: steps(4, end); animation-timing-function: frames(10); /* Multiple animations */ animation-timing-function: ease, step-start, cubic-bezier(0.1, 0.7, 1.0, 0.1); /* Global values */ animation-timing-function: inherit; animation-timing-function: initial; animation-timing-function: unset; ``` ## FAQ [贝塞尔曲线(cubic-bezier)](https://segmentfault.com/a/1190000004618375)
疑惑点: ```css animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1); ``` [CSS3 timing-function: steps() 详解](https://idiotwu.me/understanding-css3-timing-function-steps/) ```css animation-timing-function: steps(4, end); ``` ## Cylon 眼睛 考虑到所有浏览器特定的前缀,这里是一个Cylon 眼睛动画合并线性渐变和动画,适用于所有主要的浏览器: ```html
Listening for dispatches
``` ```css .polling_message { color:white; float:left; margin-right:2%; } .view_port { background-color:black; height:25px; width:100%; overflow: hidden; } .cylon_eye { color:white; height: 100%; width: 20%; background-color: red; background-image: -webkit-linear-gradient(left, rgba( 0,0,0,0.9 ) 25%, rgba( 0,0,0,0.1 ) 50%, rgba( 0,0,0,0.9 ) 75%); background-image: -moz-linear-gradient(left, rgba( 0,0,0,0.9 ) 25%, rgba( 0,0,0,0.1 ) 50%, rgba( 0,0,0,0.9 ) 75%); background-image: -ms-linear-gradient(left, rgba( 0,0,0,0.9 ) 25%, rgba( 0,0,0,0.1 ) 50%, rgba( 0,0,0,0.9 ) 75%); background-image: -o-linear-gradient(left, rgba( 0,0,0,0.9 ) 25%, rgba( 0,0,0,0.1 ) 50%, rgba( 0,0,0,0.9 ) 75%); background-image: linear-gradient(to right, rgba( 0,0,0,0.9 ) 25%, rgba( 0,0,0,0.1 ) 50%, rgba( 0,0,0,0.9 ) 75%); -webkit-animation: move_eye 4s linear 0s infinite alternate; -moz-animation: move_eye 4s linear 0s infinite alternate; -o-animation: move_eye 4s linear 0s infinite alternate; animation: move_eye 4s linear 0s infinite alternate; } @-webkit-keyframes move_eye { from { margin-left:-20%; } to { margin-left:100%; } } @-moz-keyframes move_eye { from { margin-left:-20%; } to { margin-left:100%; } } @-o-keyframes move_eye { from { margin-left:-20%; } to { margin-left:100%; } } @keyframes move_eye { from { margin-left:-20%; } to { margin-left:100%; } } ```