js动画和css3动画_js控制css动画

js动画和css3动画_js控制css动画动画css动画js动画css动画js动画

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


Web动画的本质是元素状态改变造成的样式变更,CSS动画和JS动画的区别并不是由语言来决定的,而是由两者的特点和适用场景来判断的。

  • CSS动画简洁高效,提升交互体验而编写的代码可以轻松地和主要业务逻辑之间实现隔离,开发中建议优先使用;
  • 当你需要更丰富的缓动函数,多对象关联动画或是需要在动画执行的特定时间点关联一些其他的业务逻辑等需要细节控制的场景中,JS动画就会显得更加清晰且易维护

js动画

缺点:

  • JavaScript在浏览器的主线程中运行,而主线程中还有其它需要运行的JavaScript脚本、样式计算、布局、绘制任务等,对其干扰导致线程可能出现阻塞,从而造成丢帧的情况。
  • 代码的复杂度高于CSS动画

优点:

  • JavaScript动画控制能力很强, 可以在动画播放过程中对动画进行控制:开始、暂停、回放、终止、取消都是可以做到的。
  • 动画效果比css3动画丰富,有些动画效果,比如曲线运动,冲击闪烁,视差滚动效果,只有JavaScript动画才能完成
  • CSS3有兼容性问题,而JS大多时候没有兼容性问题

css动画

CSS动画通常指使用transition实现的过渡动画和使用animation来实现的关键帧动画。

南栀的博客—CSS动画

缺点:

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

优点:

  • 浏览器可以对动画进行优化。
    • 浏览器使用与 requestAnimationFrame 类似的机制,requestAnimationFrame比起setTimeout,setInterval设置动画的优势主要是:1)requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧。2)在隐藏或不可见的元素中requestAnimationFrame不会进行重绘或回流,这当然就意味着更少的的cpu,gpu和内存使用量。

    • 强制使用硬件加速 (通过 GPU 来提高动画性能)

  • 代码相对简单,性能调优方向固定
  • 对于帧速表现不好的低版本浏览器,CSS3可以做到自然降级,而JS则需要撰写额外代码

CSS动画流畅的原因:

  • 渲染线程分为main thread(主线程)和compositor thread(合成器线程)。
  • 如果CSS动画只是改变transform和opacity,这时整个CSS动画得以在compositor thread完成(而JS动画则会在main thread执行,然后触发compositor进行下一步操作)。
  • 在JS执行一些昂贵的任务时,main thread繁忙,CSS动画由于使用了compositor thread可以保持流畅。
  • 在主线程中,维护了一棵Layer树(LayerTreeHost),管理了TiledLayer。

  • 在compositor thread(合成器线程),维护了同样一颗LayerTreeHostImpl,管理了LayerImpl,这两棵树的内容是拷贝关系,因此可以彼此不干扰。

  • 当Javascript在main thread操作LayerTreeHost的同时compositorthread可以用LayerTreeHostImpl做渲染。

  • 当Javascript繁忙导致主线程卡住时,合成到屏幕的过程也是流畅的。

  • 为了实现防假死,鼠标键盘消息会被首先分发到compositor thread,然再到main thread。这样,当main thread繁忙时,compositor thread还是能够响应一部分消息。

  • 例如,鼠标滚动时,加入main thread繁忙,compositor thread也会处理滚动消息,滚动已经被提交的页面部分(未被提交的部分将被刷白)。

CSS动画比JS流畅的前提:

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

总结:

  • 如果动画只是简单的状态切换,不需要中间过程控制,在这种情况下,css动画是优选方案。它可以让你将动画逻辑放在样式文件里面,而不会让你的页面充斥 Javascript 库。
  • 设计很复杂的富客户端界面或者在开发一个有着复杂UI状态的 APP。那么你应该使用js动画,这样你的动画可以保持高效,并且你的工作流也更可控。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181605.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常用的几种java集合类总结

    常用的几种java集合类总结一:直观框架图简单版:详细版:Java集合框架Java集合框架主要包括两种类型的容器,一种是集合(Collection),另一种是图(Map)。Collection接口又有3种子类型,List、Set和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedH…

    2022年6月12日
    35
  • 长按复制[通俗易懂]

    长按复制[通俗易懂]2019独角兽企业重金招聘Python工程师标准>>>…

    2022年9月29日
    3
  • ExtJs教程

    ExtJs教程Ø Spket插件;Ø EXT部署;Ø 常用组件;1.1–Spket插件安装1.2–Ext部署1.3–Ext常用组件:1.***Data—JsonStore,ArrayStore,XMLStore2.***grid—gridPannel3.***form—formPannel,textField,CheckBo

    2022年6月18日
    36
  • android课程设计小项目_app界面模板

    android课程设计小项目_app界面模板1课程格子试用:建立课程表又是一年开学季,相信有不少太平洋的读者都已经结束了暑假迈进了校门,脱离高三党的同学也为数不少。作为一个大学新生,你在未来数年里想要找基友也好,泡妹子也好,都免不掉主要的任务——学习。在大学里学习和高中完全不同,没有人像高中那样天天提醒你今天要上什么课。这里小编为大家推荐一款Android平台上的课程表App课程格子,好让大家记得什么时候该上什么课。软件名称:…

    2022年10月4日
    3
  • 【MQTT】在Windows下搭建MQTT服务器

    【MQTT】在Windows下搭建MQTT服务器最近在项目中要使用MQTT协议,需要搭建一个MQTT服务器来进行调试,在网络上找了一天,找到的大多数都是MQTT客户端,最后发现这篇博客写的教程可以使用,特此记录。

    2022年6月14日
    30
  • 拆解量化交易模型

    拆解量化交易模型量化交易看起来似乎就是用机器炒股,没什么大惊小怪的。但是我们拆解开量化交易的模型,您就知道其中的奥秘了。首先是输入环节:假如你是量化交易建模师。你把各种你觉得会影响股价波动的重要因素的相关数据输入到程序中。我们把常用的一种多因子选股的模型展示给大家。各种因子,您就可以理解为是炒股要看的内容。比如普通人要看公司、行业、估值、成交量、业绩等。这些都可以作为因素,将其内含数据包输入到程序里,当做因子之一。估值类因子1、预测最近年度每股股利2、未来12个月预测净利润3、每股收益

    2022年6月26日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号