h5 ios端input获取焦点弹出键盘后页面可滚动的问题

ios端input获取焦点后,弹出软键盘,底部页面在软键盘和顶部之间的区域可以触摸滚动的问题的尝试解决。目前尝试了几种方案,解决的并不是很完美,欢迎有相关经验的大佬评论指点。

问题描述

ios端,当input获取焦点,弹出软键盘后,发现当前页面在软键盘到顶部的区域可以滚动起来。如图所示:

当前页面的布局如下:

js 复制代码
.add-page {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  height: 100vh;
}

解决方案

查看小程序发现,在input聚焦出现软键盘时,触摸/点击页面上其它位置,软键盘会收起,当前input失焦。 参考小程序的方案,做了如下实现:触摸其它元素时,手动让当前的input失焦。 代码如下:

js 复制代码
// app.vue
function manualBlur(event: Event): void {
  const activeElement = document.activeElement as HTMLElement | null
  // 空值检查确保后续操作安全
  if (!activeElement) return

  // 类型收窄至具体表单元素
  const isFormElement = activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA'
  if (!isFormElement) return

  // 明确事件目标类型
  const target = event.target as Node | null
  // 确保目标存在且不是当前焦点元素
  if (target && !activeElement.contains(target)) {
    activeElement.blur()
  }
}

onMounted(() => {
  document.addEventListener('touchstart', manualBlur)
})

onUnmounted(() => {
  document.removeEventListener('touchstart', manualBlur)
})

当前方案是目前尝试的最为有效的方案,有一个小漏洞:保持当前input不失焦,还是可以滚动页面。

尝试未果的方案

  1. 由于页面内容只占大概1/3的屏幕高度,所以首先考虑了将当前页面使用fixed定位,不给高度。期望表现出和安卓类似的结果:软键盘出来将页面顶上去,不可滑动。发现没什么效果,和一开始的表现一致。 代码如下:
js 复制代码
.add-page {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  position: fixed;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
}
  1. 在软键盘弹出时,在vconsole输出window.innerHeight,发现和软键盘收起时的不一样。想着通过监听resize事件,动态设置页面高度。尝试发现,在软键盘弹起时,ios并不会触发resize事件。

  2. 在input获取焦点时,尝试禁用页面滚动,尝试无效。参考该篇文章:blog.51cto.com/u_16175474/...

相关推荐
智能运维指南8 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
白山编程大哥10 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Flynt11 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
Csvn11 小时前
bundle优化
前端
北冥有鱼12 小时前
发版后动态路由点击报 `Failed to fetch dynamically imported module`」问题上的完整排查与修复过程
前端·vue.js
静默回滚12 小时前
视频压到 25 MB 以内,码率要算、音轨要扣、余量要留
前端
用户372037492601812 小时前
把 10MB 中文语义模型塞进浏览器:STSB 做到教师模型的 93%,但线上 top1 只有 42%
前端
光锥智能12 小时前
海康机器人举行2026移动机器人新品发布会:箱式存拣升级,「明智」系列发布
java·前端·机器人
计算机魔术师12 小时前
Anthropic 上市文件最吓人的一幕,不是亏损 807 亿
前端
alsmile12 小时前
AI友好的可视化图形引擎自我革命:Meta2d.js 2.0 历时一年全新重写,性能与多人协作全面升级
前端·开源·数据可视化