移动端输入框被键盘挡住问题

发布于 2022-11-08 12:45:27 字数 908 浏览 193 评论 0

由于所开发的页面内嵌在公司的一个 APP 中,有一个类似聊天窗口的界面,测试的时候发现在部分安卓机中输入框被完全遮挡住,踩这个坑时在网上找了好多资料,好像都没有一套完整的解决办法,先看其中一种解决办法,可以解决绝大数安卓机上面的问题:

if(/Android/.test(navigator.appVersion)) {
   window.addEventListener("resize", function() {
     if(document.activeElement.tagName=="INPUT" || document.activeElement.tagName=="TEXTAREA") {
       document.activeElement.scrollIntoView();
     }
  })
}

即在安卓机中通过监听当窗口 resize 时,判断当前获得焦点的元素是否为输入框,再调用该元素的 scrollIntoView(),即将该元素展示在当前窗口的可视区域。由于只有 scrollIntoView 被各浏览器均支持,所以这个方法最为常用。

使用这段代码之后,在微信或者其他浏览器测试时有效果,但因为是需要内嵌在自家APP上,使用这段代码一直没有解决输入框被挡住的问题,最后测试才发现,APP 内置浏览器在聚焦输入框弹出键盘根本没有触发窗口的 resize 事件,瞬间心中万马奔腾(>﹏<)~~~。

后面在借鉴了某阿里的一个网页版的聊天界面,发现它是通过获取输入框焦点将输入框定位到窗口略高于输入框的位置,在失去焦点键盘弹回时再恢复到底部,于是通过这种方式处理,暂时比较暴力的解决了在安卓上该 APP 上输入框被挡住的问题,这种方法显然是不完美的,比如由于无法监听 resize 事件,而且使用的键盘高度不固定,所以只能大概的将高度设置保持在屏幕一半偏上一点。保证绝大数情况下输入框在键盘之上显示。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文