JS动画和CSS3 animation动画的区别和特点

CSS3动画

CSS3优点

  1. 浏览器可以对CSS3动画进行优化
    1.   浏览器使用与requestAnimationFrame 类似的机制,requestAnimationFrame 比起js中使用setTimeout、setInterval 优势在于requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或会流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说这个频率为60帧每秒。
    2. 在隐藏或不可见的元素中requestAnimationFrame 不会进行重绘或回流,这就意味着更少的cpu、gpu和内存使用。
  2. CSS3 动画强制使用硬件加速,通过gpu来提高动画性能。
  3. 对于帧速表现不好的低版本浏览器,CSS3可以做到自然降级,而JS则需要撰写额外的代码实现。
  4. CSS动画性能优化方向固定。

CSS3缺点

  1. 运行过程控制较弱,无法添加事件绑定回调函数。CSS3动画只能暂停,不能在动画中寻找一个特定的时间点,不能在半路反转动画,不能变换时间尺度,不能在特定的位置添加回调函数或是绑定回放事件,无进度报告。
  2. 代码冗长,想用CSS实现稍微复杂一点的动画,最后CSS代码会变得非常笨重复杂。

JS动画

JS动画优点:

  1. javascript动画控制能力很强,可以在动画播放过程中对动画进行控制,包括开始、暂停、回放、终止、取消都可以做到。
  2. 动画效果比CSS3动画丰富,有些动画效果,比如曲线运动、冲击闪烁、视差滚动效果等等,只能使用javascript动画来实现。
  3. CSS3目前还有很多的兼容性问题,而JS大多时候都不存在兼容性问题。

JS缺点:

  1. javascript在浏览器的主线程中运行,而主线程中通常还有其他需要运行的javascript脚本、样式计算、布局、绘制任务等等,都会对JS动画造成干扰,导致现成出现阻塞、从而导致丢帧的情况。
  2. 代码的复杂程度要高于CSS动画。

 

总结:

  如果动画只是简单的状态切换,不需要过程控制,此时CSS动画是优选方案,因为他可以让你讲动画逻辑放在样式文件中,而不会让你的页面充斥javascript库。而如果设计比较复杂的动画效果,并且需要过程控制不可控因素,那么使用JS是优先的选择。

你可能感兴趣的:(JS动画和CSS3 animation动画的区别和特点)