ios系统在微信浏览器中的bug-键盘弹出再收起后,界面点击区域失效

最近ios发布新版本系统12.1,随着部分用户的系统更新,一些问题也渐渐暴露出来。。。ios

公司作个活动页,在ios系统中弹出登陆界面,在键盘弹出再收起后,反应点击区域会无效浏览器

在H5端是无法监控键盘的弹出与收起的,resize事件触发的机型极其有限,况且我在ios中实测没有触发,安卓反而能够。由于安卓弹起键盘时会修改视窗的大小,可是ios并不会,若是你在ios上设置一个100%高度的body,弹起键盘后你会发现这个body是能够上下滚动的,即100%高度的body超出了视窗。app

如图所示,点击输入手机号以后,在收起键盘以后,验证码输入框点击区域都不触发事件了,若是往手机号上面的视图区域再点击,会触发验证码等点击事件iphone

推测是body没有正确从新渲染,致使点击事件不处于body内而没法触发。因此再正确推回来应该就能够解决了测试

(/iphone|ipod|ipad/i.test(navigator.appVersion)) && document.addEventListener('blur', (e) => {
       
   document.body && (document.body.scrollTop = document.body.scrollTop);

    }, true)

在input输入框失去焦点的钩子中设置滚动到原有位置(document.body.scrollTop = document.body.scrollTop),触发浏览器的重绘,使的错误的渲染回复正常,滚动位置也不会有改变,没有影响体验。3d

觉得问题就此解决,可是又有新的问题,若是点击手机号输入框以后,再点击验证码输入框,视图会往下又立马往上,感受体验有点怪怪的。code

修改代码blog

var iscanscrollpage = false; 

(/iphone|ipod|ipad/i.test(navigator.appVersion)) && document.addEventListener('blur', (e) => {
		 // 这里加了个类型判断,由于a等元素也会触发blur事件
		if(['input', 'textarea'].includes(e.target.localName)) {
			iscanscrollpage = true;

			setTimeout(function() {
				if(iscanscrollpage) {
					document.body && (document.body.scrollTop = document.body.scrollTop);
				}
			}, 200);
		}

	}, true)

$("#userphone").focus(function() {
        iscanscrollpage = false;

    });
$("#logincode").focus(function() {
        iscanscrollpage = false;
    });

延迟200ms执行,主要用iscanscrollpage来判断是否切换输入了输入框,测试解决问题。事件

补充:用document.body.scrollIntoView(false)方法也能够ip

相关文章
相关标签/搜索