JS动画与CSS动画
Posted 学无止境
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS动画与CSS动画相关的知识,希望对你有一定的参考价值。
一、JS动画(setInterval setTimeOut requestAnimationFrame)
优点:
1)过程控制能力强。可以对动画工程进行精准的控制,暂停、取消、开始、终止都可以。
2)动画效果多、炫酷。有一些效果是CSS动画所不能实现的
3)兼容性比较高
缺点:
1)由于JS是通过不断的操作DOM和CSS的属性来实现动画效果的,这需要不断的重排(reflow)和重绘(repaint),非常消耗浏览器的内存。(在PC端有浏览
器可以分配的内存比较大,动画的重排(reflow)和重绘(repaint)可以忽略不计,但是在移动端效果非常明显)
2)JS动画在主线程中执行,由于主线程中还有其他的javascript脚本等需要执行,对主线程进行干扰有可能造成丢帧的问题。
3)较CSS动画复杂
4)由于JS动画的异步处理导致动画开始执行的时间不能准确控制
二、CSS动画(transition transform animation)
优点:
1)浏览器可以进行优化
原因:浏览器使用与requestAnimationFrame 类似的机制,比起比起setTimeout,setInterval设置动画的优点是
*requestAnimationFrame 会把一帧中的所有DOM操作集中起来,在一次重绘或者回流中就完成。并且刷新频率与浏览器相同
*在隐藏或不可见的元素中requestAnimationFrame不会进行重绘或者回流,所以会使用更少的CPU GPU和内存使用量
优化的前提条件:
*在Chromium基础上的浏览器
*CSS动画不触发layout或者paint(在JS和CSS动画中触发layout和paint,需要在main thread中重新计算Layer树,这时JS CSS动画都会阻塞后续操作)
修改以下的属性能做到只触发composite,不触发layout和paint
- backface-visibility
- opacity
- perspective
- perspective-origin
- transfrom
2)部分属性能够启动3D加速和GPU硬件加速(通过GPU来提高动画性能),例如使用transform的translateZ进行3D变换时
3)代码简单,方便调优。
4)对于帧速表现不好的低版本浏览器,CSS3可以做到自然降级,而JS则需要撰写额外代码
缺点:
1)对动画工程无法控制,只能在特定场合暂停取消,不能添加回调函数
2)兼容性不好
三、性能问题
1、CSS 2D矩阵动画效率高于js利用margin和left,top模拟的矩阵动画(CSS3的2D动画是指是2D矩阵Transform变化,比如缩放\变形\x轴\y轴(js当然是不能做变形动画的))
例如,使用CSS3的transform做translateXY动画比js中的position left,position right快了近700mm!而且也更流畅
2、CSS3其它常规动画属性的效率均低于js模拟的动画(常规动画属性在这里是指:height,width,opacity,border-width,color…..)
以上是关于JS动画与CSS动画的主要内容,如果未能解决你的问题,请参考以下文章