JS动画与CSS动画使用帮助_动画小白攻略

一、JS动画优点:1)过程控制能力强。可以对动画工程进行精准的控制,暂停、取消、开始、终止都可以。2)动画效果多、炫酷。有一些效果是CSS动画所不能实现的3)兼容性比较高缺点:1)由于JS是通过不断的操作DOM和CSS的属性来实现动画效果的,这需要不断的重排(reflow)和重绘(repaint),非常消耗浏览器的内存。(在PC端有浏览器可以分配的内存比较大

JS动画与CSS动画使用帮助

一、JS动画

优点:

JS动画与CSS动画使用帮助_动画小白攻略

1)过程控制能力强。可以对动画工程进行精准的控制,暂停、取消、开始、终止都可以。

2)动画效果多、炫酷。有一些效果是CSS动画所不能实现的

3)兼容性比较高

缺点:

1)由于JS是通过不断的操作DOM和CSS的属性来实现动画效果的,这需要不断的重排(reflow)和重绘(repaint),非常消耗浏览器的内存。(在PC端有浏览器可以分配的内存比较大,动画的重排(reflow)和重绘(repaint)可以忽略不计,但是在移动端效果非常明显)

2)JS动画在主线程中执行,由于主线程中还有其他的JavaScript脚本等需要执行,对主线程进行干扰有可能造成丢帧的问题。

3)较CSS动画复杂

4)由于JS动画的异步处理导致动画开始执行的时间不能准确控制

二、CSS动画

优点:

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…..)

海计划公众号
(0)
上一篇 2020/03/26 23:28
下一篇 2020/03/26 23:28

您可能感兴趣的内容