css3针对移动端卡顿问题的解决(动画性能优化)


Posted in HTML / CSS onFebruary 14, 2020

一、使用css,jquery,canvas制作动画

1.Canvas

优点:性能好,强大,支持多数浏览器(除了IE6、IE7、IE8),画出来的图形可以直接保存为 .png 或者 .jpg的图形;

缺点:依赖于HTML,只能通过脚本绘制图形,没有实现动画的API(依靠事件和定时器更新);由于在 canvas 上以编程方式显示的文本其实就是位图,因此搜索爬行器将完全忽略文本。文本内容也无法被屏幕阅读器识别。

2.css3

优点:简单且与内容分离、css动画不触发layout和paint;(这些属性的修改不会触发layout和paint:backface-visibility、opacity、perspective、perspective-origin、transform);

缺点:有浏览器兼容性问题、安卓手机会出现卡顿、受排版引擎的限制,与整个页面的dom结构息息相关。

3.JQuery

优点:没有兼容性问题

缺点:每一帧,都要进行repaint、recomposite(非常耗时);

总结:在移动端动画效果上,使用css3动画要比jquery动画效率高的多。在安卓手机上表现尤其明显!所以移动端动画以css3动画为优先,jquery只能用来简单处理应用逻辑。css3动画是用来给内容布局加上特效的通用解决方案,但是在性能堪忧的移动浏览器上很可能会受排版性能所限,达不到理想的效果。而对性能有要求的特定场景,比如游戏,用canvas会有很大的提高。

二、css3在移动端出现卡顿问题

css3制作的动画在ios上跑的66的,但是在安卓上有时会出现卡顿现象。不妨从下面几点找找问题。

a、是否导致layout
如果是,尽可能将动画元素absolute或者fixed化以避免影响文档树,以减少重排.

b、是否启用硬件加速
“用到了CSS3动画”和“开启了硬件加速”是两件事情,虽然前者有可能导致后者。
开启硬件加速在webkit中有神奇的万金油:opacity: 1;或者-webkit-backface-visibility: hidden;。

c、是否是有高消耗的属性(css shadow、gradients、background-attachment: fixed等)
有的话,图片也是一种选择。这算得上是用空间换时间的优化了。

d、repaint的面积
如果是,只好缩小动画面积了。这一步的优化有限;

e、尽量使用 transform 生成动画,避免使用 height,width,margin,padding 等;如以下例子1和例子2。

PS:使用 transform,浏览器只需要一次生成这个元素的位图,并在动画开始的时候将它提交给 GPU 去处理 。之后,浏览器不需要再做任何布局、 绘制以及提交位图的操作。从而,浏览器可以充分利用 GPU 的特长去快速地将位图绘制在不同的位置、执行旋转或缩放处理。简而言之,transform 动画由GPU控制,支持硬件加速,并不需要软件方面的渲染

三、动画过程有闪烁(一般出现在动画开始)

解决方法:

.cube {

   -webkit-backface-visibility: hidden;

   -moz-backface-visibility: hidden;

   -ms-backface-visibility: hidden;

   backface-visibility: hidden;

   -webkit-perspective: 1000;

   -moz-perspective: 1000;

   -ms-perspective: 1000;

   perspective: 1000;

   /* Other transform properties here */

}

在webkit内核的浏览器中,另一个行之有效的方法是

.cube {

   -webkit-transform: translate3d(0, 0, 0);

   -moz-transform: translate3d(0, 0, 0);

   -ms-transform: translate3d(0, 0, 0);

   transform: translate3d(0, 0, 0);

  /* Other transform properties here */

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3地图动态实例代码(圆圈向外扩散)
Jun 15 HTML / CSS
纯CSS3实现圆角效果(含IE兼容解决方法)
May 07 HTML / CSS
纯CSS3实现的8种Loading动画效果
Jul 05 HTML / CSS
CSS3的column-fill属性对齐列内容高度的用法详解
Jul 01 HTML / CSS
css3 transform过渡抖动问题解决
Oct 23 HTML / CSS
利用html5 canvas破解简单验证码及getImageData接口应用
Jan 25 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
Apr 29 HTML / CSS
HTML5 Convas APIs方法详解
Apr 24 HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
Dec 14 HTML / CSS
HTML文本属性&颜色控制属性的实现
Dec 17 HTML / CSS
HTML5 新增内容和 API详解
Nov 17 HTML / CSS
在HTML中引入CSS的几种方式介绍
Dec 06 HTML / CSS
css3实现圆锥渐变conic-gradient效果
Feb 12 #HTML / CSS
css3翻牌翻数字的示例代码
Feb 07 #HTML / CSS
css3使用animation属性实现炫酷效果(推荐)
Feb 04 #HTML / CSS
CSS3中新增的对文本和字体的设置
Feb 03 #HTML / CSS
CSS3动画特效在活动页中的应用
Jan 21 #HTML / CSS
如何用border-image实现文字气泡边框的示例代码
Jan 21 #HTML / CSS
CSS3实现网站商品展示效果图
Jan 18 #HTML / CSS
You might like
论建造顺序的重要性
2020/03/04 星际争霸
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
php获取随机数组列表的方法
2014/11/13 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
php设计模式之单例模式代码
2016/06/11 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
Python hmac模块使用实例解析
2019/12/24 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
运动会开幕式解说词
2014/02/05 职场文书
个人考核材料
2014/05/15 职场文书
党员民主评议总结
2014/10/20 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
小组组名及励志口号
2015/12/24 职场文书
详解java如何集成swagger组件
2021/06/21 Java/Android