网站首页js/lua
apicloud页面在IOS下点击300ms延时问题的解决
发布时间:2019-07-16 08:10:56编辑:slayer.hover阅读(4133)
使用apicloud混合开发APP,在IOS上使用时,每次点击都会有300毫秒的延时,相当糟糕的体验。
经过一番测试,终于消除了。
首先引入fastclick.js库,git地址:https://github.com/ftlabs/fastclick/blob/master/lib/fastclick.js
使用很简单,将js文件引入
<script type='application/javascript' src='/path/to/fastclick.js'></script>
然后执行:
if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function() {
FastClick.attach(document.body);
}, false);
}好像是快了一些, 但是在点input输入框的时候,感觉不太对,时常点不上去,无论把输入框调到多大,
都很难聚焦,又经过一番搜索后,找到下面的代码:
FastClick.prototype.focus = function(targetElement) {
var length;
//兼容处理:在iOS7中,有一些元素(如date、datetime、month等)在setSelectionRange会出现TypeError
//这是因为这些元素并没有selectionStart和selectionEnd的整型数字属性,所以一旦引用就会报错,
//因此排除这些属性才使用setSelectionRange方法
if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 &&
targetElement.type !== 'time' && targetElement.type !== 'month' && targetElement.type !== 'email') {
length = targetElement.value.length;
targetElement.setSelectionRange(length, length);
/*修复bug ios 11.3不弹出键盘,这里加上聚焦代码,让其强制聚焦弹出键盘*/
targetElement.focus();
} else {
targetElement.focus();
}
};经过体验,input框是可以聚焦了,但点击输入框后,还是要等候漫长的300ms,input框的焦点才生效。
这怎么行, 仔细看这段代码,似乎是判断是输入框,再进行聚焦操作,那样的话,直接给input框加点击聚焦操作不就好了。
var ios = document.getElementsByTagName("input");
for(var i = 0; i < ios.length; i++){
ios[i].onclick=function(){
this.focus();
}
}经过操作果然流畅了很多,收工。
--------------------------------------------更新------------------------------------------------------
引入fastclick.js库之后,执行
if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function() {
FastClick.attach(document.body);
}, false);
}
FastClick.prototype.focus = function(targetElement) {
targetElement.focus();
};
function inputFocus(){
setTimeout(function () {
var ios = document.getElementsByTagName("input");
for(var i = 0; i < ios.length; i++){
ios[i].onclick=function(){
this.focus();
}
}
},50);
}然后在页面里显式调用inputFocus();
注:如果使用了Vue来绑定过的input框, 需要在input框渲染完成后,再调用inputFocus(),否则无效。
评论