textarea置底展示问题
ios 中的输入体验永远伴随着一个问题,就是当唤起键盘后,整个页面会被键盘压缩,也就是说页面的高度变小,并且所有的fixed全部变为了absolute。
android效果:
使用 fixed 定位。
可见 android 中唤起键盘是覆盖在页面上,不会压缩页面。
在 ios 上的效果:
那么如果我们需要将输入框固定在屏幕下方,而当键盘被唤起同时输入框固定在键盘上方(如下图样式)该如何解决呢?
首先我们来看下 ios 的表现。
可以看出,键盘会将页面顶上去。那么如果希望可以将输入框和键盘完全贴合,我们可以使用div模拟一个假的输入框,使用定位将真正的输入框隐藏掉,当点击假的输入框的时候,将真正的输入框定位到键盘上方,并且手动获取输入框焦点。
在实现过程中需要注意下面几个问题:
1、真正的输入框的位置计算:
首先记录无键盘时的 window.innerHeight,当键盘弹出后再获取当前的 window.innerHeight ,两者的差值即为键盘的高度,那么定位真输入框自然就很容易了。
2、在 ios 下手动获取焦点不可以用 click 事件,需要使用 tap 事件才可以手动触发
$('#fake-input').on($.os.ios?'tap' : 'click', function() {
initHeight = window.innerHeight;
$('#input').focus();
});
3、当键盘收起的时候我们需要将真输入框再次隐藏掉,除了使用失去焦点(blur)方法,还有什么方法可以判断键盘是否收起呢?
这里可以使用 setInterval 监听,当当前 window.innerHeight 和整屏高度相等的时候判断为键盘收起。
注意:键盘弹起需要一点时间,所以计算当前屏幕高度也需要使用setInterval。
4、因为 textarea 中的文字不能置
解决iOS键盘遮挡输入框问题

本文介绍了一种在iOS设备上解决键盘遮挡网页输入框的技术方案,通过使用虚拟输入框和监听键盘事件来确保输入框始终位于键盘上方,提供更好的用户体验。
最低0.47元/天 解锁文章
2418





