css3动画主要分两个部分
- 1、animation @keyframes动画
-
@keyframes rainbow {
0% { background: #c00; }
50% { background: orange; }
100% { background: yellowgreen; }
}
div:hover {
animation: 1s rainbow;
}
- 2、transition动画
-
transition:background 2s, opacity 1s ease-out 2s;
css3动画性能局限性
很多动画在PC上没有的性能问题,一旦到手机上就会变得非常的明显,最关键的是性能问题
就算今后手机双核、四核也不会根本改变这个现状,其主要原因是单线程,即使有多个CPU,同一个时间也只能用一个CPU
具体可以准从以下标准
- 1、动画触发的reflow要尽可能小
- 2、动画尽可能使用absolute的方式(流动线)
- 3、动画的区域尽可能小,并且里面的结构要简单
- 4、文字的动画性能消耗较小,图片次之。
- 5、不推荐整个页面的动画,比如说模拟native的整页切换效果
- 6、动画的话尽可能使用CSS而不是JS,如果使用JS的话,推荐使用webkitRequestAnimationFrame的方式介绍
- 7、对于动画的节点,开启硬件加速 translateZ(0)
- 8、动画的时间不宜过长,经验来看500ms-1s,就差不多了,时间越长,其性能问题越明显
动画的一些坑
- 1、transition需要加上webkit的前缀,改变的属性不确认的话,可以设置成all。
- 2、animation在低版本需要加上-webkit的前缀。
- 3、transition适合用在短而小的动画上面,animation适合用在会不断重复的场景里
- 4、动画出现断帧的现象,即看到的动画卡,发生断帧
- 动画期间,发生垃圾收集,这个时候整个页面会强制停顿数百毫秒
- 由于单线程的原因,当一段动画在播放时,如果出现另外一段动画,势必就将当前的动画渲染暂停
- 在动画播放期间,发生了js的操作,特别是在ajax的场景下,会发生