微信公众号开发 当有input输入完成,键盘消失后页面底部空白

微信公众号内, 部分手机输入密码时自动切换到安全键盘, 点击页面任一地方收起键盘,键盘自动收回后有很大几率出现一块空白继续占着屏幕下方位置,这是滑动页面也无效一样会有空白位置,点击输入框重新唤起键盘再收回页面就变回正常

微信公众号开发 当有input输入完成,键盘消失后页面底部空白_第1张图片

踩坑很多,最后终于解决

有人说,给body定位,有人说,给页面设置固定高度,有人说失去焦点的时候,window.scrollTo(0,0),

经过尝试都不行。

后来经过尝试发现只有密码输入框的时候有这个问题,普通的输入框没有出现这个问题,所以考虑当密码输入框失去焦点但是底部空白的时候,再创建一个input,使其聚焦并且失去焦点,然后解决了问题,

但是还是有缺点,就是focusout刚触发的时候document.documentElement.clientHeight的高度还没有改变,需要定时器过个一段时间才会改变,这样就会 有一个底部空白的过程然后再消失,目前只有这个方法了,以后看看有没有优化的空间吧,

以下是我的代码

    
mounted() {
  this.bodyHeight = document.documentElement.clientHeight

      var timer = null
      document.body.addEventListener('focusin', () => { // 软键盘弹起事件
        
        if (timer && e.target.type !== 'button') {
          clearTimeout(timer)
          timer = null
        }
      })
      document.body.addEventListener('focusout', (e) => { // 软键盘关闭事件
        
        if (e.target.type === 'password') {
          timer = setTimeout(() => {
            clearTimeout(timer)
            timer = null
            const nowH = document.documentElement.clientHeight
            console.log('timeout', nowH, this.bodyHeight)
            if (nowH < this.bodyHeight) {
              const oinput = document.createElement('input')
              oinput.style.width = '0px'
              document.body.appendChild(oinput)
              oinput.focus()
              oinput.blur()
              document.body.removeChild(oinput)
            }
          }, 1000)
      })
},

你可能感兴趣的:(html5,javascript,vue.js)