一、问题

今天在使用css3的transition做动画过渡时,发现动画会卡顿,特此记录我发现卡顿的一些原因和笔记。
先给出结论:
在使用css3 transtion做动画效果时,transform实现的动画是与合成器线程相关的,不需要等待主线程样式计算或者 JS 执行,计算速度是很快的;而使用height,width,margin和padding做动画过渡时,会导致浏览器发生布局和绘制的调整,主线程需要重新计算样式并且执行JS,计算速度自然就慢了。

二、以height为过渡属性时

当一个元素的过渡属性为height:从100px,过渡到200p时,

div {height: 100px;transition: height 1s linear;
}div:hover {height: 200px;
}

主线程和合成线程将按照下面的流程图执行相应的操作。注意在橘黄色方框的操作会比较耗时,在蓝色框中的操作是比较快速的。
(搬运了别人的图片来解释一下~~)

从图中可以看出,主线程将运行100次(101px => 102px => 103px => …),合成线程将运行100次(101px => 102px => 103px => …)。并且每次主线程运行时,都会经过一次主线程的渲染流程。
主线程的渲染流程,可以参考浏览器渲染网页的流程:

使用 HTML 创建文档对象模型(DOM)
使用 CSS 创建 CSS 对象模型(CSSOM)
基于 DOM 和 CSSOM 执行脚本(Scripts)
合并 DOM 和 CSSOM 形成渲染树(Render Tree)
使用渲染树布局(Layout)所有元素
渲染(Paint)所有元素

也就是说,主线程每次都需要执行Scripts,Render Tree ,Layout和Paint这四个阶段的计算。

三、以transform为过渡属性时

div {transform: scale(0.5);transition: transform 1s linear;
}div:hover {transform: scale(1.0);
}

以transform为过渡属性时,主线程和合成线程将按照下面的流程图执行相应的操作。

从图中可以看出,主线程将运行1次,合成线程将运行100次。且合成线程的耗时是比主线程的少的。
看到这里,小伙伴们应该能清楚为什么用height、width、margin、padding为过渡属性时,动画有时会卡顿了吧(在性能越差的设备,卡顿越明显)。根据专业人士测量,transform比margin性能好50%~70%
都看到这里了,就请小伙伴们留下你的点赞吧,谢谢给位啦。

四、结论

在使用css3的transition做动画过渡时,优先使用transform,尽量不要使用height,width,margin和padding。

参考文献:
CSS3 动画卡顿解决方案
CSS3动画卡顿性能优化解决方案

CSS transition动画卡顿的探究相关推荐

  1. css鼠标拖拉卡顿_浅谈CSS3 动画卡顿解决方案

    为什么会卡顿? 有一个前提必须要提,前端开发者们都知道,浏览器是单线程运行的.但是我们要明确以下几个概念:单线程,主线程和合成线程. 虽然说浏览器执行js是单线程执行(注意,是执行,并不是说浏览器只有 ...

  2. CSS3 动画卡顿性能优化解决方案--摘抄

    最近在开发小程序,与vue类似,它们都有生命周期这回事. onLoad 监听页面加载 onReady 监听页面初次渲染完成 onShow 监听页面显示 到底是什么意思? 所以这又触碰到了我的知识盲区, ...

  3. lottie android 卡顿,说说动画卡顿的解决方案

    CSS3 动画卡顿解决方案 前端时间用animation实现H5页面中首页动画过渡,很简单的一个效果,首页加载一个客服头像,先放大,停留700ms后再缩小至顶部.代码如下 首页加载动画 .welcom ...

  4. android 动画卡顿分析工具

    android 动画卡顿分析工具 Android应用性能优化之分析工具 上一次记录了解决过度绘制的过程,这一次,想先弄清个概念性的东西,就是如何判断顺不顺畅? 这东西其实最初我自己也觉得有点废话,用起 ...

  5. Android 解决帧动画卡顿问题

    Android帧动画一次性加载会造成ui卡顿,所以就有了这份代码.通过handle队列和Bitmap复用,每次加载一张并显示,可以解决帧动画卡顿问题. 使用方法: int[] right_res_id ...

  6. android帧动画卡顿现象,css3针对移动端卡顿问题的解决(动画性能优化)

    一.使用css,jquery,canvas制作动画 1.Canvas 优点:性能好,强大,支持多数浏览器(除了IE6.IE7.IE8),画出来的图形可以直接保存为 .png 或者 .jpg的图形: 缺 ...

  7. 拯救动画卡顿之FLIP

    前置知识 什么是FPS FPS是浏览器的每秒的渲染帧数,也就是浏览器切换画面的次数,大多数设备的刷新率都是60FPS,一般来说FPS越低页面就会越卡顿. 什么是像素管道? 像素管道是浏览器单个帧的渲染 ...

  8. React-Native Navigator 过渡动画卡顿的解决方案

    在RN0.44版本之前,路由导航跳转几乎是使用的是Navigator组件,在0.44版本以后就不推荐使用了,官方推荐的是react-navigation,当然还是可以在废弃的库中找到: import ...

  9. canvas 的动画卡顿问题(运行一段时间卡顿)

    最近公司有项目需要写纯canvas组件,所以花了一段时间学习了下canvas. canvas这东西上手简单,精通难.而且也很少纯canvas写,所以网上参考的内容也比较少. 这里记录我用canvas遇 ...

最新文章

  1. 谈谈 Java 中自定义注解及使用场景
  2. Source Insight常用快捷键
  3. mac instantclient_12_2 安装配置
  4. jQuery-1.9.1源码分析系列(一)整体架构
  5. 线上服务被干爆了,竟然是日志的锅!!
  6. Prefactoring——Introduction
  7. C#中的表达式与运算符
  8. 如果40岁仍碌碌无为,牢记2句话,最迟也是大器晚成
  9. 用户信息填写web代码_zabbix监控系列之监控项(8、web监控)
  10. 【教程】PDF控件Spire.PDF 教程:在C#中检测PDF文件是否为PDF/A
  11. 淘宝/天猫API系列:图片搜索淘宝商品接口
  12. vue制作子组件以及在父组件中引入子组件
  13. Outliers: The Story of Success
  14. 过零检测电路原理与作用 可控整流
  15. c语言20s计数器,计数器延时程序与级联程序的plc梯形图实现
  16. 键盘RK61-win10蓝牙
  17. c语言间接寻址与指针,C语言中指针是不是用汇编的间接寻址实现的?
  18. iconfont官网中的图标保留其原本的颜色
  19. 【电商项目实战】个人资料(详细篇)
  20. 【Android】【UI】ACTION_CANCEL什么时候执行

热门文章

  1. 那些人工智能明星公司都在搞什么? AI从业者必知必会!
  2. 洛谷-P1518-两只塔姆沃斯牛
  3. 中国信息咨询主要类型机构公司经营发展规模
  4. matlab画矩阵色块图,大于0的数越大越红,小于0的数越小越蓝,0值为白色
  5. 关于QString的section方法的一些问题
  6. clean my mac X2021(简称CMM X)清理软件中文版激活秘钥
  7. 华润大学ldap账号是什么_认证配置 - 接入 LDAP / AD 域账号(Beta) - 《KubeSphere v2.1 使用手册》 - 书栈网 · BookStack...
  8. 软件工程专业的发展方向
  9. 最新可用二级域名分发系统网站源码
  10. 揭秘属于开发者的文创设计诞生记