安卓键盘弹出遮挡解决 保证输入框在可视范围 (未完成测试)

安卓键盘弹出会把窗口顶起来,但收起时又不会自动滚动回来,从而导致页面错位等问题

借鉴思路即可,还需要针对项目具体需求进行改造。

思路: 利用安卓键盘弹出收起会触发resize事件来进行相关操作, 在无滚动条的单页面直接用 window.scrollTo 重置下页面位置即可,在有滚动条的页面始终保证输入框在可视区域

已知缺陷:

1. 由于上述所说的 ‘在有滚动条的页面始终保证输入框在可视区域’ ,导致输入框位置可能会变化,给人的感觉是输入框在跳位置一样(实际 scrollIntoView 是滚动到固定的位置)

2. scrollIntoView 在设置了 behavior: "smooth"属性之后就不能正常工作了,在html,body设置了css属性 scroll-behavior ​​​​​​​之后也不能正常工作  (测试时二者的取值都是 smooth)

	// 解决键盘弹出遮挡 保证输入框在可视范围
		const ua = window.navigator.userAgent.toLocaleLowerCase();
		const isIOS = /iphone|ipad|ipod/.test(ua);
		const isAndroid = /android/.test(ua);
		if (isAndroid) {
			var originHeight = document.documentElement.clientHeight || document.body.clientHeight;
			var isScroll =  (document.documentElement.scrollHeight || document.body.scrollHeight) > originHeight; // 有滚动条的页面(移动端的滚动条在body)
			// 由于js获取不到键盘弹出事件,所以只能通过监听window.resize来执行相关操作 (安卓的键盘弹出会触发,iOS的不会)
			window.addEventListener('resize', function () {
				var resizeHeight = document.documentElement.clientHeight || document.body.clientHeight;
				if (originHeight < resizeHeight) {
					// Android 键盘收起后操作
					if(isScroll) {
						document.activeElement.scrollIntoView({ block: "center" }); // 键盘收起后将输入框挪到可视区域内
					} else {
						// 如果是没有滚动条的单页面的话直接滚动页面到初始位置即可
						window.scrollTo({
							top: 0,
							behavior: "smooth"
						});
					}
				} else {
					// Android 键盘弹起后操作
					document.activeElement.scrollIntoView({block: "center"}); // 兼容第三方输入法跟浏览器
				}
				originHeight = resizeHeight;
			}, false)
		}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值