安卓-绝对定位在输入时使页面顶起,输入结束页面未恢复

问题描述:当页面中存在绝对定位和输入框时,输入框输入时,会将页面向上顶起,输入结束后,软键盘消失,页面并没有恢复,依然保持被顶起的状态。
问题解决:尝试了多种网上搜寻的方法,现记录如下:

身份证上传使用了绝对定位

方法一

<input type="text" placeholder="请输入身份证号" id="idNumber">
$('#idNumber').on('blur', function(e) {
  window.scrollTo(0,0);
})

该方法是在输入框失去焦点之后,将滚动上去的页面恢复原位,但对我的页面并没有作用。同时存在的问题是,软键盘消失,输入框依然保持聚焦的状态,需要手动在页面其他地方点击,才能失去焦点,用户体验不好。

方法二

document.body.addEventListener('focusin', () => {  //软键盘弹起事件
  $('.upload-idCard-btn').css('position', 'fixed');
})
document.body.addEventListener('focusout', () => { //软键盘关闭事件
  $('.upload-idCard-btn').css('position', 'absolute');
})

该方法是通过监听软键盘弹起/关闭事件,改变定位元素的属性值。键盘弹起,改为固定定位;键盘关闭,改为绝对定位。存在的问题是,监听软键盘关闭事件没起作用,依然需 要用户点击页面其他地方使输入框失去焦点后,页面才可以恢复。

方法三(推荐)

var winHeight = $(window).height();   //获取当前页面高度
$(window).resize(function(){
    var thisHeight=$(this).height();
    if(winHeight - thisHeight >50){
      //当软键盘弹出,在这里操作
      $('.upload-idCard-btn').css('position', 'fixed');
    }else{
      //当软键盘收起,在此处操作
      $('.upload-idCard-btn').css('position', 'absolute');
    }
});

此方法解决了方法二的问题,通过监听页面高度的变化,有效判断软键盘的弹起和关闭,用户体验很好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容