因为动画导致卡闪的解决方法

Posted greengreencui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了因为动画导致卡闪的解决方法相关的知识,希望对你有一定的参考价值。

方法:

1、对使用-webkit-transform:translate() 移动的标签,使用translate3d 替换 translate

2、增加-webkit-transform-style: preserve-3d; 样式

3、增加-webkit-backface-visibility:hidden; 样式

4、尽量使用-webkit-transform 代替 -webkit-animation

5、减少@-webkit-keyframe 的定义和 使用

6、减少图片,降低图片大小;避免大图片压缩成小图片显示,或者小图片放大成大图片显示;图片显示尺寸尽量还原真实(高清@x2)情况

7、-webkit-transform 的时候,不用同时使用其他动画(例如 opacity)

8、不要使用all,也就是不要使用-webkit-transiton:all 1s;应该尽量详细定义 -webkit-transiton 的属性,例如-webkit-transiton:-webkit-transform 1s;

9、查看附近的webview 是否加载太多内容,太多动画,若是请添加离开当前页面时把动画效果暂时取消的功能;

10、对于运用了硬件加速的元素(例如元素A),与它重叠的元素如果没有同样运用硬件加速的属性,也会影响整个动画效果

11、尽量对使用动画的元素 设置成“非布局元素”,例如 position:absolute/fixed。

12、元素 从display:xxx 到 display:none;会使浏览器layout计算。要隐藏元素,请用visibility:hidden,或者translate(9999px,9999px)

13、对于多个png比较大的图片,建议把其改为一个jpg的图片和一个填充区域为黑色的图片,采取-webkit-mask-image:url()来降低图片大小。

14、如果连续多篇大交互文章,存在太多的动画,建议在中间插入引导页或其他文章隔开,多图片,并且动画效果多,效果一定会卡机,我们可以避免减少使用图片,如10张数字的图片,尽量找相近的字体动态生成数字

 

补充,ios6 及以上的系统不再支持上面的前两条的属性触发硬件加速,请用以下属性(经过测试得出,最起码3个属性一起用的时候是有效的)代替之:

-webkit-transform: translateZ(0);

-webkit-perspective: 1000;

-webkit-backface-visibility:hidden;

 

解释:

第1、2条,在iOS 6 之前,是web 触发 浏览器启动硬件加速(GPU 渲染)的方法

第3条,一种调用 GPU 渲染的 hack

第4、5条,animation 会比 transform 多消耗性能

第11条,对于“布局”元素,当它进行动画的时候会触发浏览器的重绘

第12条,对于被改变成display:none 的元素,浏览器会停止绘制,也就触发了浏览器重新计算当前文档需要绘制图形的个数,消耗量cpu 的计算导致影响其他JS 和 css 的动画计算能力。

第13条,采用jpg和png的混合使用方法来实现遮罩,大大节省了空间。

 

特别注意:

硬件加速不能大量地,随意地用,因为大量的使用 GPU 渲染同样会拖慢 渲染效果。

 

相关资料:

iOS6 html hardware acceleration changes and how to fix them:http://indiegamr.com/ios6-html-hardware-acceleration-changes-and-how-to-fix-them/

CSS3 TRANSITION 的背后:http://newhtml.net/behind-css3-transitions/

高性能 CSS3 动画:http://www.qianduan.net/high-performance-css3-animations.html

 

以上是关于因为动画导致卡闪的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

css动画卡片位置会闪的问题

快闪h5的制作方法 ,人人都可以快速制作快闪

SwiftUI视图状态更改使用withAnimation()方法无动画效果的解决

SwiftUI视图状态更改使用withAnimation()方法无动画效果的解决

因为selinux导致zabbix无法启动问题解决方法

因为selinux导致zabbix无法启动问题解决方法