H5底部输入框点击弹起来的时候被软键盘遮挡bug

就是输入框在底部,然后点击输入框的时候,软键盘弹起来了,但是输入框没有跟着一起弹起来,被软键盘档住了。

这个bug有下面几个特点

特点1

而且这个bug在ios17是没有的,在ios16是有的,并且是偶现的。

特点2

点击弹起的软键盘的完成是没有问题的,但是点击屏幕让软键盘收起来就不太行。

特点3

如果输入框里面有内容是不会被挡住的,但是没有内容的时候,只有一个placeholder的时候就会被挡住,没有placeholder就不会被挡住。

通过查询资料,想通过js的scrollIntoView方法强制滚动,于是就在

javascript 复制代码
<textarea
        className={clsx(
          "relative z-20 font-['PingFang SC'] min-h-[20px] flex max-h-[182px] w-full items-center rounded-[12px] bg-[#F5F5F5] px-[14px] py-[10px] text-[16px] leading-normal text-[#3e3e45] transition-all"
        )}
        onFocus={(e) => {
    
            e.target.scrollIntoView(true);
     

        }}
        placeholder={`尝试问一些问题吧`}
      />

于是就在onFoucs事件的时候进行滚动,但是发现不行,事件是触发了,但是没滚动上来,于是怀疑,事件触发的时候,键盘还没滚动起来,所以没有生效。于是就在setTimeout解决

javascript 复制代码
<textarea
        className={clsx(
          "relative z-20 font-['PingFang SC'] min-h-[20px] flex max-h-[182px] w-full items-center rounded-[12px] bg-[#F5F5F5] px-[14px] py-[10px] text-[16px] leading-normal text-[#3e3e45] transition-all"
        )}
        onFocus={(e) => {
          setTimeout(() => {
            e.target.scrollIntoView(true);
          }, 700)

        }}
        placeholder={`尝试问一些问题吧`}
      />

时间还不能加少,加少了效果不行,加到700毫秒的时候就能明显的看到,键盘弹起来把输入框挡住了,然后输入框接着也弹起来了,但是会有一个时间差,体验也不是很完美。

那么如何知道软键盘弹起呢?试了resize事件,但是看日志没有打印出来

javascript 复制代码
useEffect(() => {
    // 监听软键盘的弹出和隐藏
    window.addEventListener('resize', () => {
      console.log('键盘弹出');
    });
  }, []);

经查资料,ios中不触发此事件,而安卓中有此事件。

所以只能依靠focus事件,加定时后scrollIntoView解决。

如果有什么更好的办法,欢迎留言,下面是最终解决办法代码

javascript 复制代码
<textarea
        className={clsx(
          "relative z-20 font-['PingFang SC'] min-h-[20px] flex max-h-[182px] w-full items-center rounded-[12px] bg-[#F5F5F5] px-[14px] py-[10px] text-[16px] leading-normal text-[#3e3e45] transition-all"
        )}
        onFocus={(e) => {
          setTimeout(() => {
            e.target.scrollIntoView({ block: 'start', behavior: 'smooth' });
          }, 610)
        }}
        placeholder={`尝试问一些问题吧`}
      />
相关推荐
T01156186 小时前
全栈项目实战手记|艺培场馆课时预约小程序底层安全、交互、分包全量迭代复盘
安全·小程序·bug·前端实战·全栈项目实战手记·小程序实战
霍格沃兹测试学院-小舟畅学1 天前
DeepSeek Harness vs Claude Code:谁更会修Bug、跑测试?
bug
咖啡星人k1 天前
2026 AI 自动化测试:让 AI 帮你写用例、跑测试、修 Bug(MonkeyCode 云端实战)
人工智能·功能测试·单元测试·测试用例·bug·集成测试
Shadow(⊙o⊙)3 天前
Bug调试1.0
bug
T01156184 天前
艺培场馆课时预约小程序用户端 & 后台联动踩坑上篇(预约、课时、缓存、消息、学员端自身问题)
java·缓存·小程序·bug·全栈项目实战手记·艺培课时系统‘’
zone_z4 天前
07 · 等待事件与 OWI 方法:从 OSW 到 BUG 的完整破案实录
linux·数据库·oracle·ffmpeg·bug·troubleshooting
黑猫学长呀5 天前
【驱动开发常见问题】编译出现rm: cannot remove `asm/arch‘: Is a directory
驱动开发·单片机·嵌入式硬件·bug·编译报错·kernrl
姚青&6 天前
测试流程搭建
测试用例·bug·jira
mmsx6 天前
return false 不是拦截:一次按键触发两个动作的事件冒泡陷阱
android·bug
随风丶飘7 天前
[特殊字符] 告别“update“和“fix bug“——Smart Git Commit LLM 让 AI 帮你写专业的 Git 提交信息
人工智能·git·bug