弹出软键盘时:
ios端$(‘body’).scrollTop()会改变
android端$(window).height()会改变
方法一:
ios 管用
// 直接找到 input 点这个函数即可 scrollIntoView(); 前面要是 js 选择器,不能是 jq
$('#price').on('focus', function () {
document.querySelector("#price").scrollIntoView();
})
方法二:
解决方案原理:
安卓浏览器在软键盘弹出后不会像ios浏览器那样重新计算window的高度,所以导致安卓浏览器window的高度在软键盘弹出的时候为“软键盘的高度+(window的高度-软键盘的高度)”;而其实,此时,合理的高度应该是页面的高度+软键盘弹出的高度;就此解决方案为如下:
var winHeight = $(window).height(); //获取当前页面高度
$(window).resize(function() {
var thisHeight = $(this).height();
if (winHeight - thisHeight > 50) {
//当软键盘弹出,在这里面操作
//alert('aaa');
$('body').css('height', winHeight + 'px');
} else {
//alert('bbb');
//当软键盘收起,在此处操作
$('body').css('height', '100%');
}
});
方法三:(安卓和ios有用)
安卓在输入完信息之后,点击收起键盘之后,input 框还是在获取焦点,底部会留用空白;ios 不会出现这样
input 框的获取焦点事件和失去焦点事件
// 获取焦点事件
$("#price").on('focus', function onFocusAddr() {
setTimeout(function(){
// 设置body的高度为可视高度+302
// 302为原生键盘的高度
document.getElementsByTagName('body')[0].style.height = (window.innerHeight + 302) + 'px';
document.body.scrollTop = 302;
}, 300)
})
// 失去焦点事件
$("#price").on('blur', function onFocusAddr() {
// 设置body恢复原来的高度
document.getElementsByTagName('body')[0].style.height = window.innerHeight + 'px';
})