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中transition属性详解
Sep 02 HTML / CSS
基于css3 animate制作绚丽的动画效果
Nov 24 HTML / CSS
详解CSS3中字体平滑处理和抗锯齿渲染
Mar 29 HTML / CSS
css3 边框、背景、文本效果的实现代码
Mar 21 HTML / CSS
CSS3实现文字描边的2种方法(小结)
Feb 14 HTML / CSS
分享一个页面平滑滚动小技巧(推荐)
Oct 23 HTML / CSS
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
Jan 06 HTML / CSS
HTML5的语法变化介绍
Aug 13 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
Jan 07 HTML / CSS
canvas简单连线动画的实现代码
Feb 04 HTML / CSS
h5封装下拉刷新
Aug 25 HTML / CSS
css3中transform属性实现的4种功能
Aug 07 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
PHP4实际应用经验篇(6)
2006/10/09 PHP
php heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
PHP常用技巧汇总
2016/03/04 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
使javascript也能包含文件
2006/10/26 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
2017/10/26 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
Python中的random()方法的使用介绍
2015/05/15 Python
Python中的集合类型知识讲解
2015/08/19 Python
Python多线程实现同步的四种方式
2017/05/02 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
django框架两个使用模板实例
2019/12/11 Python
pandas-resample按时间聚合实例
2019/12/27 Python
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
幼儿园数学教学反思
2014/02/02 职场文书
创业大赛策划书
2014/03/01 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang
nginx内存池源码解析
2021/11/20 Servers