问题描述:当页面中存在绝对定位和输入框时,输入框输入时,会将页面向上顶起,输入结束后,软键盘消失,页面并没有恢复,依然保持被顶起的状态。
问题解决:尝试了多种网上搜寻的方法,现记录如下:
方法一
<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');
}
});
此方法解决了方法二的问题,通过监听页面高度的变化,有效判断软键盘的弹起和关闭,用户体验很好。