H5移动端输入框随键盘上移

您所在的位置:网站首页 vue文本输入框光标跟随键盘移动 H5移动端输入框随键盘上移

H5移动端输入框随键盘上移

2023-10-20 02:40| 来源: 网络整理| 查看: 265

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 中的文字不能置底显示,当输入超过一行textarea需要自动调整高度,因此将scrollHeight赋值给textarea的height。当删除文字的时候需要height也有变化,因此每次input都先将height置0,然后再赋值。

$('#textarea').css('height', 0); $('#textarea').css('height', $('#textarea')[0].scrollHeight); 仿原生效果

解决webview中input被遮挡后webview整体在iOS壳子中向上滚动,而不是仅input随着键盘抬高问题

js中代码:

{ $("#commentInputItem").show(); $("#commentInputDiv").hide(); const handler = window["webkit"] && webkit && webkissageHandlers["bridgeMessage"] if (handler) { // 是在iOS壳子里 $(".comment-reply").css({ top: "auto", bottom: "1000px", position: "absolute", opacity: "1" }); } this.text.focus(); }}>回复...


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3