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

来源:脚本之家  责任编辑:小易  

1. 页面是否重绘 如果每加载一次动画 dom树都重新绘制 肯定会造成卡顿 absolute脱

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

@-webkit-keyframes imgSmall{0%{width: 175px;hei

1.Canvas

建议对电脑可进行优化:1、漏洞修复:打开腾讯电脑管家——工具箱——修复漏洞,新安装的系统,漏洞都

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

如果animation修改的是一些常见属性width,height等等的话,建议修改成transfo

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

LOGO是将五个三角形拆开分别设置的,所以在翻转的时候在IE11上面看会有很短暂的时间卡一下,大概0

2.css3

都说儿子随妈,姑娘像爹。我们都是父母所生,每个孩子都是由爸爸的精子和妈妈的卵细胞结合之后,经过十个月的孕育而来到世界上的。爸爸的精子带着23条爸爸的染色体,妈妈的卵细胞则带着23条来自妈妈的染色体,它们组合在一起,就构成了宝宝的23对染色体。那么孩子会更多继承哪一方呢,难道就像电脑合成图一样,是“相加然后除以二”?遗传学可没这么坏,孩子更像谁,这主要是由等位基因决定的。每对染色体上相同位置的基因就叫等位基因,它们控制的是同一性状,一个来自父亲、一个来自母亲。基因有显性和隐性之分,如果一对染色体上两个等位基因都是显性或者一个显性一个隐性,表现出来的性状都是显性性状,只有当两个等位基因都是隐性时,

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

我这个人,是一个喜欢在各地品尝小吃的馋鬼,或者说馋猫、好吃精、美食家。因为工作的关系,几十年来,我常常往来于苏南苏北各地,今天,我介绍江苏的普通的面食:一、苏南阳春面在苏州和无锡,早餐我非常喜欢吃阳春面。我觉得很像是其他地方的面食,例如阳春面,却无论如何都不如苏州、无锡的好吃。如果高兴,可以加一小碟爆鳝丝,或者是猪耳朵,吃的热乎乎的,非常舒服。面条的柔软恰到好处,不过是普普通通的加一点荤油和酱油,却难以忘怀。又无法解析其中的奥妙,我这个人无论如何做不出这么好吃的阳春面。而爆鳝丝呢,在上海市就不行了,远远不如苏州和无锡。猪耳朵也是苏州、无锡烧的好。二、大丰的鱼汤面在三十多年前,在大丰汽车站的对面

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

适合学生党的口红,无外乎两个关键点。1价格比较便宜2颜色比较清淡推荐四款我觉得适合学生党的口红哈!从左到右分别是kiko变色口红欧莱雅夹心口红apieu女王玫瑰保湿口红rd006欧莱雅纷泽流光唇釉600,价格均在100以内1kiko变色唇膏,dior变色唇膏的评价替代品,滋润度很好,涂上嘴巴之后的颜色也不输dior!性价比超高。价格大概6、70的样子。2这款不讨论了,貌似国内买不着。有去泰国旅行的朋友可以在皇权免税店看看有没有这款夹心口红的套装,这款夹心口红竟然比欧美大牌的夹心口红还早出了好几年!3apieu女王玫瑰保湿口红rd006apieu貌似是missha旗下的平价品牌,看试色就能看出,

3.JQuery

有一种新的作假手法让很多小白级朋友上当过,这种作假新手法“抛光粉上色”首先,必须说明一下,给翡翠用抛光粉上色其实也算不上什么新的作假手法;因为这种抛光粉上色的手镯在两三年前就已经有了。但相对于做B+C染色的手镯,抛光粉上色还算是一种新的翡翠作假手手法吧。B+C染色手镯一般是去冒充高档翡翠,大家一般都会提高警惕。而抛光粉上色的手镯是去冒充中低档的有色手镯;所以外行人容易被麻痹,以至于上当受骗。而且抛光粉上色的手镯有愈演愈烈的趋势,因此,写出此贴,介绍一下抛光粉上色手镯的基本情况:先讲一讲我们经常在瑞丽看见的抛光粉镯子的情况,然后介绍一几个抛光粉手镯进行水煮去色的结果。这样大家就会一目了然了。关于

优点:没有兼容性问题

缺点:每一帧,都要进行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 */ }

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

如何解决css3动画在安卓机上卡顿现象

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

  • <!DOCTYPE html>

    <html>

    <head lang="zh-cn">

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=1" >

    <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>

    <title>首页加载动画</title>

    <head>

    <style>

    .welcome-main{

    display: none;

    padding-bottom: 40px;

    }

    .top-info{

    width: 100%;

    position: absolute;

    left: 0;

    top: 93px;

    }

    .wec-img{

    width: 175px;

    height: 175px;

    position: relative;

    padding: 23px;

    box-sizing: border-box;

    margin: 0 auto;

    }

    .wec-img:before{

    content: '';

    position: absolute;

    left: 0;

    top: 0;

    width: 100%;

    height: 100%;

    background: url("./images/kf-welcome-loading.png");

    background-size: 100%;

    }

    .wec-img .img-con{

    width: 100%;

    height: 100%;

    border-radius: 50%;

    /*box-sizing: border-box;*/

    background: url("./images/kf_1.jpg");

    background-size: 100%;

    padding: 1px;

    }

    .wec-img .img-con img{

    width: 100%;

    height: 100%;

    border-radius: 50%;

    }

    .loaded .wec-img{

    -webkit-transform-origin: center top;

    }

    .loading.welcome-main{

    display: block;

    }

    .loading .wec-img{

    -webkit-animation:fadeIn .3s  ease both;

    }

    .loading .wec-img:before{

    -webkit-animation:rotate .6s .2s linear both;

    }

    .loaded .top-info{

    -webkit-animation:mainpadding 1s 0s ease both;

    }

    .loaded .wec-img{

    -webkit-animation:imgSmall 1s 0s ease both;            }

    @-webkit-keyframes mainpadding{

    0%{-webkit-transform:translateY(0)

    }

    100%{-webkit-transform:translateY(-87px)

    }

    }

    @-webkit-keyframes imgSmall{

    0%{

    width: 175px;

    height: 175px;

    padding: 23px;

    }

    100%{

    width: 60px;

    height: 60px;

    padding: 0;

    }

    }

    @-webkit-keyframes fadeIn{

    0%{opacity:0;-webkit-transform:scale(.3)}

    100%{opacity:1;-webkit-transform:scale(1)}

    }

    @-webkit-keyframes rotate{

    0%{opacity:0;-webkit-transform:rotate(0deg);}

    50%{opacity:1;-webkit-transform:rotate(180deg);}

    100%{opacity:0;-webkit-transform:rotate(360deg);}

    }

    </style>

    <body>

    <div class="welcome-main">

    <div class="top-info">

    <div class="wec-img"><p class="img-con"><img src="" alt=""></p></div>

    </div>

    </div>

    <script>

    $('.welcome-main').addClass('loading');

    setTimeout(function(){

    $('.hi.fst').removeClass('loading');

    $('.welcome-main').addClass('loaded');

    },700);

    </script>

    </body>

    </html>

  • 在 chrome 上测试 ok,但在提测给 QA 的时候发现部分机型,如华为(系统4.2),oppo(系统5.1)的出现卡顿情况。

  • 百思不得其解,后来参考文章深入浏览器理解 CSS animations 和 transitions 的性能问题一文,将图片缩放中动画元素改成 transform,如下

  • @-webkit-keyframes imgSmall{

    0%{

    -webkit-transform:scale(1);

    }

    100%{

    -webkit-transform:scale(.465);

    }

    }

  • 果然啊,卡顿问题解决了。

  • 文章深入浏览器理解 CSS animations 和 transitions 的性能问题是这么解释的,现代的浏览器通常会有两个重要的执行线程,这 2 个线程协同工作来渲染一个网页:主线程和合成线程。

  • 一般情况下,主线程负责:运行 JavaScript;计算 HTML 元素的 CSS 样式;页面的布局;将元素绘制到一个或多个位图中;将这些位图交给合成线程。

  • 相应地,合成线程负责:通过 GPU 将位图绘制到屏幕上;通知主线程更新页面中可见或即将变成可见的部分的位图;计算出页面中哪部分是可见的;计算出当你在滚动页面时哪部分是即将变成可见的;当你滚动页面时将相应位置的元素移动到可视区域。

  • 假设我们要一个元素的 height 从 100 px 变成 200 px,就像这样:

  • div {

    height: 100px;

    transition: height 1s linear;

    }

    div:hover {

    height: 200px;

    }

  • 主线程和合成线程将按照下面的流程图执行相应的操作。注意在橘*方框的操作可能会比较耗时,在蓝色框中的操作是比较快速的。

  • 而使用 transform:scale 实现

  • div {

    transform: scale(0.5);

    transition: transform 1s linear;

    }

    div:hover {

    transform: scale(1.0);

    }

  • 此时流程如下:

  • 也就是说,使用 transform,浏览器只需要一次生成这个元素的位图,并在动画开始的时候将它提交给 GPU 去处理 。之后,浏览器不需要再做任何布局、 绘制以及提交位图的操作。从而,浏览器可以充分利用 GPU 的特长去快速地将位图绘制在不同的位置、执行旋转或缩放处理。

  • 为了从数量级上去证实这个理论,我打开 chrome 的 Timeline 查看页面 FPS

  • 其中,当用 height 做动画元素时,在切换过程的 FPS 只有 44,我们知道每秒 60 帧是最适合人眼的交互,小于 60,人眼能明显感觉到,这就是为什么卡顿的原因。

  • rendering 和 painting 所花的时间如下:

  • 再来看看用 transform:scale

  • FPS 达到 66,且 rendering 和 painting 时间减少了 3 倍。

  • 到此为止问题是解决了,隔了几天,看到一篇解决 Chrome 动画”卡顿”的办法,发现还能通过开启硬件加速的方式优化动画,于是又试了一遍。

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

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

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

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

    transform: translate3d(0,0,0);

  • 总结解决 CSS3 动画卡顿方案

  • 尽量使用 transform 当成动画熟悉,避免使用 height,width,margin,padding 等;

  • 要求较高时,可以开启浏览器开启 GPU 硬件加速。

本回答被提问者采纳

如何解决css3的filter: blur属性在移动端会使得js卡顿的问题

不建议在移动端用这个效果,你可以用两张图片一张用模糊的一张用清楚的~然后通过JS切换达到

filter: blur的效果~

怎么解决CSS3动动画卡顿

要搞清楚是你机器性能不行还是你的动画写的有问题

手机上CSS3动画卡顿问题怎么解决

1、在存储卡在长时间的使用中会逐渐造成手机启动速度降低,明因此磁盘整理成为必要。

2、建议用腾讯手机管家清理手机内存,内容包括缓存垃圾、系统垃圾、广告垃圾清理加速,达到优化空间的目的。空间优化了,自然卡顿也会得到改善。

3、做好手机资料备份,重置手机,恢复出厂设置,这一招相当管用、彻底!本回答被提问者采纳

手机上CSS3动画卡顿问题怎么解决

一、有可能还是手机垃圾占用了太多空间,可腾讯手机管家手工具清理一下内存空间。删掉无用的安装包、视频、应用缓存等,释放手机内存空间。

二、从来没有清理过微信缓存,导致微信图片和聊天记录等缓存过多,占用了大量内存空间。这种情况,清理一下微信就能解决空间不足的问题。

三、打开腾讯手机管家小火箭清理加速内存,更好的释放内存空间,为手机提速。

  • 本文相关:
  • css 阴影动画优化技巧
  • 浅析与css3的loading动画加载相关的transition优化
  • 如何解决css3动画在安卓机上卡顿现象
  • 如何解决css3的filter: blur属性在移动端会使得js卡顿的问题
  • 怎么解决CSS3动动画卡顿
  • 手机上CSS3动画卡顿问题怎么解决
  • 手机上CSS3动画卡顿问题怎么解决
  • 如何解决css3动画在android机上卡顿现象
  • css3轮播为什么会卡顿
  • jquerycss3 transition 初始化动画为什么卡顿
  • css3 animation初始动画卡顿是怎么回事
  • IE11浏览器上的CSS3动画有卡顿是什么原因
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved