© Young 2018-12-26 21:43

Welcome to My GitHub

一般在使用 CSS3 keyframe transform 实现逐帧动画时,往往会先把逐帧动画图片合成精灵图,然后再使用 transform 改变其位置,这个方法会消耗大量显存(帧数越多,合成的精灵图越大,显存消耗越多),容易出现闪烁的问题。

直接看例子:

以下截图都来自于 OPPO FindX Chrome 远程调试。

页面中有50个使用 CSS3 keyfrmae 结合 transform 实现的逐帧动画;

为什么会闪烁,大概是因为 transform 会导致浏览器开启硬件加速,每个动画区域都是一个独立的渲染层;

在调试 工具 的 Layers 中可以看到:

另外还要注意每个独立的渲染层并不仅仅只是显示出来的那一小块区域,而是整个逐帧动画精灵图内容区域,这应该就是为什么例子中的逐帧动画会消耗那么多显存的原因了。

当选中 Rendering 中的 FPS meter 就可以看到,总消耗显存 130M 左右。

接着再看 Performance:

可以看到因为渲染层太多,光栅化会消耗较长时间,此时页面空白,较长时间的空白就会造成闪烁。

怎么解决这个问题呢?

Canvas逐帧动画

普通的2D Canvas并不是独立的渲染层,渲染区域也仅仅只是显示的那一块区域,并不会消耗太多显存;

最后上述 Canvas逐帧动画是可以再优化一下的;

每次绘制时都是从整个精灵图中选取一部分绘制,这其实是比较耗时的操作;

正确的做法应该在精灵图加载完成之后,先从精灵图中拆出每一帧的图片,然后绘制时直接绘制特定帧的图片即可。

这样优化之后,页面中 Paint 阶段的耗时就可以从 10毫秒 减少为 5 毫秒了。

css逐帧动画图片太大怎么办,不建议使用 CSS3 keyframe transform 实现逐帧动画相关推荐

  1. html中图片太大了,css背景图片太大的坏处与解决方法

    在制作网页的过程中,有时候我们为了页面的个性.漂亮,会给通过CSS给网页设置一个很大的背景图片,可是背景图片太大的话不但会给我们的访客带来一些烦恼,还会对搜索引擎不友好,导致排名的降低,实在是得不偿失 ...

  2. webview显示图片太大,导致webview显示图片还要左右滑动的解决方法

    如图所示是解决好之后的样子 原始代码: string content="<p>IT之家3月15日消息 今日凌晨,苹果公司已宣布其2019年全球开发者大会的日期:<span ...

  3. 移动端上(传图片太大)处理方案

    利用FileReader和FormData实现图片预览和上传(base64转二进制文件) 监听表单文件变化 文件表单的样式主要通过让它后面,通过别的DOM来美化它. <input type=&q ...

  4. Android之解决布局文件图片太大同步放缩后挤掉其它布局的问题

    1.问题 局文件图片太大同步放缩后挤掉其它布局的问题 比如有个图片logo1.png,很大,在平板上图片布局写成这样 <ImageViewandroid:src="@drawable/ ...

  5. 基于layer的图片弹出展示,默认原大小展示。图片太大则等比例缩小

    /**** html:<img src="img/1.jpg" onclick="showimg('img/1.jpg');">* 图片弹出展示,默 ...

  6. Android图片太大导致无法正常显示

    Android图片太大导致无法正常显示 原因 安卓中有个内存的限制,超过这个限制后资源是无法显示的 解决办法 在全局配置文件中进行对内存的配置[关键:android:largeHeap="t ...

  7. tabbaritem 图片太大解决方案

    tabbaritem 图片太大解决 图片很大,下面的字都挡着了.搜到方法是把原来的名字后面加上@2x,原来是tab_chat.png 修改为 tab_chat@2x.png问题解决大小正好. 就是不明 ...

  8. 【Android Studio】ImageView / ImageButton 图片太大或者太小解决方法

    第一步:指定layout_width与layout_height 在xml文件中设置的ImageButton的宽和高为: android:layout_width="100dp" ...

  9. 图片太大导致 imageView无法显示

    图片太大导致 imageView无法显示 项目中遇到预置大图,在imageView加载时显示不出来 从网络中收集资料,明白了原来imageView 在把图片填充到控件中,是通过分辨率(例如:720*1 ...

最新文章

  1. 【组队学习】【27期】集成学习
  2. Msdn 杂志 asp.net ajax 文章汇集
  3. php 不存在给默认值,当属性不存在时,创建一个属性并给它一个默认值
  4. java 固定长度队列_如何彻底搞懂 Java 数据结构?|CSDN 博文精选
  5. 使用Spring-hadoop小结
  6. java jdk myeclipse_java初体验(JDK+myeclipse)
  7. WORD如何比较原文档和别人修改过的文档?
  8. linux如何加入windows域
  9. 开源 20 年,为何程序员对闭源越来越厌恶?
  10. 使用函数式编程方式-递归
  11. js中 NaN、 null 及 undefined 的区别(转载)
  12. ProtoBuf与JSON
  13. YDOOK:ANSYS 谐波分析的要点和主要应用场景 谐波效应的来源
  14. python爬取拉勾网职位信息_python-scrapy爬虫框架爬取拉勾网招聘信息
  15. 这五个数据分析师技巧你一定要知道!
  16. 为什么能力越低的人,越容易产生对自己过高的评价?
  17. Xilinx SDx尝鲜之下载安装
  18. 演示笔记本重装系统win10教程,笔记本电脑安装win10系统
  19. 一些电商英文缩写的解释
  20. OVF部署失败:找不到文件ds:///vmfs/volumes/uuid/_deviceImage-0.iso原因和解决方法

热门文章

  1. 测试、预发布、生产环境测试时的侧重点是哪些?
  2. scrapy pipeline 管道 (图片,文件)
  3. python fail to execute,pyinstaller 打包出现“Failed to execute script XXX“问题
  4. Windows下去掉快捷方式的箭头并不锁定任务栏的简单操作
  5. JavaScript运算符——一元、二元、三元运算符
  6. 线性回归算法 及其推导
  7. 专业咨询顾问的“6Z”人生
  8. 全民直播时代 内容监管还得靠技术
  9. 史丰收算法 - 蓝桥杯
  10. 你是一个高情商的人吗