晚饭前,被测试吐槽说,banner轮播手动左右滑的时候会卡顿。我一看不科学啊,大水果手机怎么会卡顿。我一看测试手中拿的是iPod,我觉得大概是这小玩意性能不强悍,后来又拿来5S,依然会卡顿,有趣的是,两个5S,一个IOS7一个IOS8,IOS7基本没有卡顿,IOS8会卡。

饭后从测试那里借了iPod。。。。就着手解决这个问题。

我一直觉得轮播不应该会有什么问题,因为我用的是一个库Swipe,star都有5000多了,应该比较靠谱,捎带推荐一下这个库。用在移动端十分合适,未压缩带注释的只有15k,而且支持无限轮播、手动左右滑动以及配置项。

(你会发现作者仓库东西不多,而且其他的基本没有start。。。)

用法也很简单,Github上的ReadMe足以,我再啰嗦一遍:

HTML结构:

<div id='slider' class='swipe'>
<div class='swipe-wrap'>
<div></div>
<div></div>
<div></div>
</div>
</div>

CSS样式:

.swipe {
overflow: hidden;
visibility: hidden;
position: relative;
}
.swipe-wrap {
overflow: hidden;
position: relative;
}
.swipe-wrap > div {
float:left;
width:100%;
position: relative;
}

JavaScript代码:

window.mySwipe = new Swipe(document.getElementById('slider'), {
startSlide: 2,
speed: 400,
auto: 3000,
continuous: true,
disableScroll: false,
stopPropagation: false,
callback: function(index, elem) {},
transitionEnd: function(index, elem) {}
});

好了,继续刚才的卡顿,谷歌也没谷歌个出毛线,还是得进Github里看看项目的issue,已经300多个issue了。。既然在IOS出的卡顿,就以IOS为关键字筛选,依然还有很多,一条一条的看,英文啊看的蛋疼。

经过漫长的查看(其实也就几分钟。。。。),找到了个这个

iOS hardware acceleration trigger fix (CSS)

Addition of -webkit-perspective and -webkit-backface-visibility on container element in order to trigger hardware acceleration in iOS6. This is a fix since translate3d no longer triggers hardware acceleration in iOS6 Safari.

然后我就抱着试试看的态度加在了css里:

.swipe {
overflow: hidden;
visibility: hidden;
position: relative;
}
.swipe-wrap {
overflow: hidden;
position: relative;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.swipe-wrap > div {
float:left;
width:100%;
position: relative;
}

加上了之后,只能说,丝滑到不行!!!!!issue里提到IOS6,其实我想说IOS7 、IOS8也有这个问题。

之前对硬件加速的理解不深,而且只知道translateZ(0)这个hack,今天才知道perspective和backface-visibility也是可以的。其实在SwipeJS这个库里面有一个translate方法,里面有这么一句:

style.webkitTransform = 'translate(' + dist + 'px,0)' + 'translateZ(0)';
style.transform = 'translateX(' + dist + 'px)';

可以看到对于旧的系统使用了translateZ这个hack,而对于新的系统就没有使用,或许作者认为新的系统已经可以流畅运行了。我刚开始改了下:

 style.webkitTransform =
style.transform = 'translate(' + dist + 'px,0)' + 'translateZ(0)';

不过 没什么乱用,还是加了perspective和backface-visibility才起的作用。

另外,上面那个issue是12年的!!!而且提issue的同志还提了pr也被作者merge了,但是最新版的CSS代码里并没有出现perspective和backface-visibility这两个属性,或许还是作者认为现在的机器足以流畅了。

bug改完一身轻松,总结一下:

硬件加速真的很有用,而且开启的方式不止translateZ。

对于使用了开源的作品遇到问题,记得查issue。

最后,再啰嗦一下,刚才提到的perspective和backface-visibility两个属性很有用。如果你在transform或者transition的过程中发现有闪烁的现象,页面里加上他们俩试一试。具体看这里

移动Web轮播图IOS卡顿的问题的更多相关文章

  1. 移动web——轮播图

    1.我们将5张图片又前后各增加一张,第一张前增加的是原本的第五张,第五张后增加的是原本的第一张,增加的原因无非是手指滑动的时候有轮播效果,这不像以前的轮播图,点击图标就能立刻将ul跳转到指定位置,手机 ...

  2. 移动端web轮播图插件swiper,功能很强大

    使用方法示例: <div class="swiper-container"> <div class="swiper-wrapper"> ...

  3. JS+css3焦点轮播图PC端

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 一步一步拆解一个简单的iOS轮播图(三图)

    导言(可以不看): 不吹不黑,也许是东半球最简单的iOS轮播图拆分注释(讲解不敢当)了(tree new bee).(一句话包含两个人,你能猜到有谁吗?提示:一个在卖手机,一个最近在卖书)哈哈... ...

  5. ReactNative新手学习之路04 组件化开发轮播图swiper支持安卓和IOS

    react native 新手之路04 组件化开发轮播图swiper支持安卓和IOS npm install react-native-carousel --save git 地址Properties ...

  6. iOS 图片轮播图(自动滚动)

    iOS 图片轮播图(自动滚动) #import "DDViewController.h" #define DDImageCount 5 @interface DDViewContr ...

  7. iOS回顾笔记(05) -- 手把手教你封装一个广告轮播图框架

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  8. web常见效果之轮播图

    轮播图的展示效果是显而易见: HTML代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  9. iOS最笨的办法实现无限轮播图(网络加载)

    iOS最笨的办法实现无限轮播图(网络加载) 简单的做了一下: 使用方法: 把 请求返回的 图片地址(字符串类型)放进数组中就行 可以使用SDWebImage(我就是用的这个)等..需要自己导入并引用, ...

随机推荐

  1. .Net 下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox

    一直以来,我都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出 ...

  2. 在编辑模式中一个ASP.NET应用详细视图显示集合属性 编辑模式和只读模式

    https://documentation.devexpress.com/#Xaf/CustomDocument3230

  3. handler looper 和 线程

     Handler的概念: 顾名思义,handler在英语中是“操作着,处理者的意思”,而官方的文档给出的概念是,handler允许你发送或者处理Message对象或者Runable对象,这两个对象都是 ...

  4. 用PredicateBuilder实现Linq动态拼接查询

    在使用Linq查询的时候,特别是如果你在使用Entiry Framwork,有时会遇到动态查询的情况(客户的查询条件是不固定的拼接查询).我们能想到的第一方案应该是拼接SQL,的确这样是可以达到我们的 ...

  5. YYCache 设计思路

    iOS 开发中总会用到各种缓存,最初我是用的一些开源的缓存库,但到总觉得缺少某些功能,或某些 API 设计的不够好用.YYCache (https://github.com/ibireme/YYCac ...

  6. 如何利用log4Net自定义属性配置功能记录完整的日志信息

    log4Net作为专业的log记录控件,对于它的强大功能大家一定不陌生.下面我将详细介绍如何利用其自定义属性,让日志信息更完整. 一,创建测试工程,log4Net组件可以自己从网上下载,也可通过Nug ...

  7. PetaPoco使用要点

    PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM! 可以从这里获得PetaPoco: NuGet - http://nuget.org/List/Packages/Pe ...

  8. css+div网页设计(二)--布局与定位

    在网页设计中,能否控制好各个模块中在页面中的位置是非常关键的,与传统的表格定位不同,css+div定位方式更加的灵活,本篇博客将为大家介绍css+div的布局与定位. 一.盒子模型 由图可以看出 盒子 ...

  9. java的线程中的Runnable

                      在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thr ...

  10. 关于如何用sql语句查询出连续的一串数字

    在数据库操作中,经常有一些这样的操作:插入诺干条测试数据.查询这个月的登录情况(没有登录的日期不能不存在,要显示数量为0),获取诺干条guid. 这些的基础都是怎么生成连续的一串数字  1 2  3  ...