h5 如何解决键盘弹起时,固定元素向上浮动的问题

我的是安卓手机的微信公众号存在这个问题,当input获得焦点,键盘弹起时,固定元素失效元素会向上浮动,

为了区分安卓系统和IOS系统,我先读取设备的系统;

var u = navigator.userAgent;
//Android终端
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
//iOS终端
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);

使用window.onresize监听窗口大小是否发生变化,如果窗口发生变化,键盘弹起了,并且是安卓设备,input也获取焦点了,那么就将元素定位到一个合适的位置,否则就回到原位置,如下代码:

var originalHeight=document.documentElement.clientHeight ||document.body.clientHeight;

window.onresize=function(){
	//键盘弹起与隐藏都会引起窗口的高度发生变化
	var resizeHeight=document.documentElement.clientHeight||document.body.clientHeight;
		if((resizeHeight)<(originalHeight)){
			//当软键盘弹起,在此处操作
			if(isAndroid && $('.invoice_apply input[type="text"]').is(":focus") ){
				// $('.sub_invoice_apply').css('display','none')
				$('.invoice_apply .sub_invoice_apply').css({bottom:"-3rem"});
			}
			}else{
				//当软键盘收起,在此处操作
				if(isAndroid){
				// $('.sub_invoice_apply').css('display','none')
				$('.invoice_apply .sub_invoice_apply').css({bottom:"0rem"});
			}
		}
}

需要注意的是,如果在各个input(这里是text输入框)切换时,那么键盘会一直处在弹起状态,此时就需要对输入框的获取焦点和失去焦点做控制了,有如下代码:

$('.invoice_apply input[type="text"]').focus(function () {
	if(isAndroid){
	    // $('.sub_invoice_apply').css('display','none')
	    $('.invoice_apply .sub_invoice_apply ').css({bottom:"-3rem"});
	}
});

$('.invoice_apply input,.invoice_apply select').blur(function () {
	document.body.scrollTop = 0;//在键盘收藏后,页面样式回到顶部
	if(isAndroid){
		// $('.sub_invoice_apply').css('display','none')
		$('.invoice_apply .sub_invoice_apply').css({bottom:"0rem"});
	}
});

以上就是我用来解决【键盘弹起时,固定样式失效】的方法,如果各位有好的见解,还请多多指教!!!!!!

你可能感兴趣的:(浏览器兼容问题)