解决ios微信端失焦键盘隐藏后,被顶起的页面不回弹问题
项目中遇到了这个问题,说实话 iOS 端问题挺多的,原因找起来比较简单,就是吊起键盘的时候把window的高度挤小了,
然后,关掉键盘页面高度没恢复,底下出现空白区域,并导致光标位置错乱,再次点击输入框区域时无法focus;安卓手机会自动恢复页面高度。
原因找到了就想解决办法,刚开始想的是 iOS 它不恢复那我也没办法,这属于 iOS 的bug啊或者微信的 bug 啊,
但领导不这么想,页面显示出问题了当然得解决,就在google里翻,也是找到解决方法了,如下链接
article
解决方法很简单,让window滚动下就可以恢复window的高度了。
function temporaryRepair() {
var currentPosition, timer;
var speed = 1;//页面滚动距离
timer = setInterval(function () {
currentPosition = document.documentElement.scrollTop || document.body.scrollTop;
//获取到当前位置的top值,在1ms的时间内,向上滚动再向下滚动回原位置,即window滚动一小点,来实现回弹
currentPosition -= speed;
window.scrollTo(0, currentPosition);//页面向上滚动
currentPosition += speed; //speed变量
window.scrollTo(0, currentPosition);//页面向下滚动
clearInterval(timer);
}, 1);
}
//获得焦点时
$('input').on('focus', function () {
focus = true;
});
//失去焦点时,判断是否为ios
$('input').on('blur', function () {
focus = false;
if (!focus) {
setTimeout(function () {
var ua = navigator.userAgent.toLowerCase();
var version = navigator.appVersion.toLocaleLowerCase();
if (ua.indexOf("micromessenger") > 0 && version.indexOf("iphone") > 0) {//在iphone 微信中
temporaryRepair();
}
}, 200)
}
});
如果遇到软键盘弹出时,输入框被遮挡 ,可以使用一下代码:
// 软键盘弹起时,解决输入框被遮挡
document.body.addEventListener('focusin', (e) =>{
var timer1 = setInterval(function() {
document.body.scrollTop = document.body.scrollHeight;
clearInterval(timer1);
}, 100)
})
通过js使页面滚动条回到顶部:
$('input').on('blur',function(){
window.scroll(0,0);
});