起因:在ipad上做了一个查询的小功能,无需登录,应用程序需要长期打开
遇到的坑:
1.由于h5时使用的safrai缩放,解决方法meta中viewport user-scalable=no,
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height" />
2.如果长安节目会出来粘贴、全选之类的,可以引入如下css解决:
*{ -webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;
-ms-user-select:none; user-select:none;}
3. 苹果为了自身一些效果,iphone、ipad等等下都会有一个300毫秒的延时,导致一个卡顿的视觉效果,解决办法:
引入fastclick.js,源码分析可以参考:https://www.cnblogs.com/vajoy/p/5522114.html ,这个兄弟写得很详细
4. 引入fastclick 后又产生了几个意想不到的问题,比如一些Input框,点击几次后就会有卡顿,程序放置长时间后按钮点击无效等,细查代码+alert调试,发现几个问题,
a. 并不是所有的地方都需要fastclick加速,所以FastClick.attach(document.body)可以改为FastClick.attach(document.getElementById('itemId')),这样避免不需要加速的地方受fastclick影响,还有一个其他方式,在不需要加速的class上加入样式名 needsclick
b.长久放置后页面按钮失效,查起原因罪魁祸首就是 event.timeStamp 取值为负,所以对源码做了特殊的处理,
b1.在onTouchStart 和 onTouchEnd中 定义变量把这个值存起来curTimeStamp = event.timeStamp; 所有用到这个变量的地方都使用这个临时变量
b2.当这个变量为负时做特殊处理
if(curTimeStamp <0 ){
curTimeStamp = this.tapTimeout;
this.lastClickTime = curTimeStamp -this.tapDelay -this.tapDelay/2;
this.trackingClickStart = curTimeStamp- this.tapTimeout/2;
this.trackingClick = true;
}
然后测试,所有恢复正常,折腾了几天感觉还是挺有意思!