解决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);
});
posted @ 2020-08-21 13:32  ZerlinM  阅读(71)  评论(0编辑  收藏  举报