css3动画和js动画有哪些区别

这篇文章给大家分享的是有关css3动画和js动画有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

10年积累的成都网站设计、做网站、成都外贸网站建设公司经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有景泰免费网站建设让你可以放心的选择与我们合作。

区别:1、js动画的控制能力比css3动画强;2、js动画的效果比css3动画丰富;3、js动画大多数情况下没有兼容性问题,而css3动画有兼容性问题;4、js动画的复杂度高于css3动画。

本教程操作环境:windows7系统、CSS3&&javascript1.8.5版、Dell G3电脑。

JS动画

优点:
  • js动画控制能力强,可以在动画博凡过程中对动画进行精细控制,开始、暂停、终止、取消都是可以做到的

  • 动画效果比css3动画丰富,比如曲线运动,冲击闪烁,视差滚动效果,只有js动画才能完成

  • js动画大多数情况下没有兼容性问题,而css3动画有兼容性问题

缺点
  • js动画的复杂度高于css3

  • js在动画浏览器的主线程中执行,而主线程还有其他javaScript脚本,样式计算、布局、绘制任务等,对其干扰可能出现阻塞从而出现丢帧的情况

  • js动画往往需要频繁操作DOM的css属性来实现视觉上的动画效果,这个时候浏览器要不停地执行重绘和重排,这对于性能的消耗是很大的,尤其是在分配给浏览器的内存没那么宽裕的移动端。

CSS3动画

优点:

1、部分情况下浏览器可以对动画进行优化,为什么说部分情况下呢,因为是有条件的:

  • 在Chromium基础上的浏览器中

  • 同时CSS动画不触发layout或paint,在CSS动画或JS动画触发了paint或layout时,需要main thread进行Layer树的重计算,这时CSS动画或JS动画都会阻塞后续操作。

    在主线程中,维护了一棵Layer树(LayerTreeHost),管理了TiledLayer,在compositor thread,维护了同样一颗LayerTreeHostImpl,管理了LayerImpl,这两棵树的内容是拷贝关系。因此可以彼此不干扰,当Javascript在main thread操作LayerTreeHost的同时,compositor thread可以用LayerTreeHostImpl做渲染。当Javascript繁忙导致主线程卡住时,合成到屏幕的过程也是流畅的。
    为了实现防假死,鼠标键盘消息会被首先分发到compositor thread,然后再到main thread。这样,当main thread繁忙时,compositor thread还是能够响应一部分消息,例如,鼠标滚动时,加入main thread繁忙,compositor thread也会处理滚动消息,滚动已经被提交的页面部分(未被提交的部分将被刷白)。

2、部分效果可以强制使用硬件加速 (通过 GPU 来提高动画性能)

缺点
  • 运行进程控制较弱,css3动画只能在某些场景下控制动画的暂停与继续,不能在特定的位置添加添加回调函数

  • 代码冗长。想用 CSS 实现稍微复杂一点动画,最后CSS代码都会变得非常笨重。

css动画比js动画流畅的前提

  • js在执行一些复杂的任务

  • css动画比较少或者不触发pain和layout,即重绘和重排,例如通过改变如下属性生成的css动画

    • backface-visibility

    • opacity

    • perspective (设置元素视图)

    • perspective-origin

    • transfrom

  • 部分属性能够启动3D加速和GPU硬件加速,例如使用transform的translateZ进行3D变换时

  • 在Chromium基础上的浏览器中,这个貌似是内核做了优化,当css动画知识改变transfrom和opacity时,整个CSS动画得以在compositor thread完成(而JS动画则会在main thread执行),这样css动画渲染不会影响主线程。

感谢各位的阅读!关于“css3动画和js动画有哪些区别”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


本文标题:css3动画和js动画有哪些区别
本文URL:http://azwzsj.com/article/ghsdhj.html