H5 input 浮层 键盘遮挡

H5移动端输入框随键盘上移 输入在移动端是一个很常用的功能,那么输入框必然是一个很重要的部分。然而,移动端输入框总会遇到各种各样的问题,无论是样式还是ios和android两端体验不一致都是很让我们头疼的问题,那么如何使移动web的输入框体验更贴近原生也成了一个需要我们多多思考和研究的问题。 一、文字输入限制问题 我们拿最多可输入16个字为例。当输入字数(注意,不是字符长度)超过16字时,会触发 tips 提示,并且不能继续输入。 办法一: textarea 可以使用 maxlength 进行输入字数限制。 但是这个办法只能单纯的限制 阅读详情

这个问题,其实在前端是个老生常谈的问题。

在生产环境中,我们是嵌入到 app 中使用的 H5 降级页面,在去哪儿和携程的 app 中的 webview 容器,表现不一致

携程的 app 表现比较正常,和一般浏览器表现类似,但是去哪儿,有点奇葩。键盘弹起来之后,页面高度依旧不变,着实费解。

 

最终的解决方案其实是在携程中使用 scrollIntoViewIfNeeded

在比较奇葩的去哪儿使用监听 focus,在底部加 padding 的做法。之所以不使用定位,是因为,键盘高度我不确定。所以我给 padding,这样白色的区域即使大一点也可以接受。不至于出现浮层和键盘中间断层。

具体的代码截取了部分。其实,主要是个思路。代码自己实现更好,因为涉及到调试,不自己写的话,心里也没底。

我是使用 ts+react实现,另外,我认为尽量不要使用定位来实现,因为你不知道哪个 webview 就会出现幺蛾子。当然了,定位也解决不了键盘遮挡的问题

!核心函数,计算 dom 位置

// 计算需要提升的元素 : dom的位置
    const movePanel = (enevt: string) => {
      if (judgeDeviceType.isIOS) {
        const dom = codeRef.current.closest(".css-3pxmmn");
        if (dom) {
          console.log("enevt", enevt);
          // 这里是区分 去哪儿端,去哪儿的 webview 容器,比较奇葩,scrollIntoView 不生效,
          // 虽然页面被推上去了,但是页面高度不变,所以特殊处理
          if (window.location.href.indexOf("qunar") > -1) {
            if (enevt === "blur") {
              return setTimeout(() => {
                dom.style.paddingBottom = 0;
              }, 0);
            }
            if (enevt === "focus") {
              return setTimeout(() => {
                dom.style.paddingBottom = "380px";
              }, 300);
            }
            if (enevt === "click") {
              return setTimeout(() => {
                dom.style.paddingBottom = "380px";
              }, 0);
            }
          }
          return setTimeout(() => {
            dom.scrollIntoViewIfNeeded(true);
          }, 300);
        }
      }
    };

首次展示的时候,触发一次 focus 


    // 首次展示的时候,调用一次 focus
    // codeRef.current 代表需要 focus 的 input 元素
    useEffect(() => {
      let moveTimer: any = null;
      if (visiable && codeRef.current) {
        codeRef.current.focus();
        moveTimer = movePanel("focus");
      }
      return () => {
        clearTimeout(moveTimer);
      };
    }, [visiable, codeRef.current]);

操作浮层上的 input 元素,触发重新定位函数

 // 注册 focus, click, blur 事件
    // drawerRef.current 代表需要 改变定位的浮层容器
    useEffect(() => {
      let moveTimer: any = null;
      if (
        drawerRef &&
        drawerRef.current &&
        codeRef &&
        codeRef.current &&
        !isBindListener
      ) {
        codeRef.current.addEventListener("focus", () => {
          moveTimer = movePanel("focus");
        });
        codeRef.current.addEventListener("click", () => {
          moveTimer = movePanel("click");
          // drawerRef.current.style.bottom = "240px";
        });
        codeRef.current.addEventListener("blur", () => {
          moveTimer = movePanel("blur");
        });
      }
      isBindListener = true;
      return () => {
        clearTimeout(moveTimer);
      };
    }, [
      drawerRef,
      drawerRef.current,
      codeRef,
      codeRef.current,
      isBindListener,
    ]);

 

H5,JS仿微信输入法,键盘上面带input输入框,兼容安卓、ios H5,JS仿微信输入法,键盘上面带input输入框 阅读详情

相关推荐

完美修复ios原生键盘遮挡input框

最近在做一个仿微信的聊天界面,有一个固定在页面底部的input框,本来使用fixed定位在底部,在android手机上没有任何问题,但在iOS上当点击输入内容的时候会出现不同情况的原生键盘遮挡输入框的情况。度娘出了很多解决方法,但没有一个方法可以完美解决,而且发现很多人都有这个问题,自己就苦思冥想出了一个相对不错的解决方法,跟大家分享一下。先跟大家列举一下网上的解决方法,还有我的实践结果posit...

weixin_42280006的博客 2465

H5移动端监听键盘弹出收起visualViewport

H5移动端监听键盘弹出收起visualViewport // 获取页面的可视高度 const originHeight = document.documentElement.clientHeight || document.body.clientHeight const resizeHandler = () => { // 页面大小发生改变 重新获取可视窗口的高度 const resizeHeight = document.documentElement.client

weixin_39137100的博客 1206

h5键盘遮挡输入框问题 、模仿微信输入框失去焦点时隐藏iphone的软键盘和聚焦时出现输入框

最近的项目做得是混合开发,其实比较尴尬的啦,手机端的安卓与ios挺多兼容问题的。 1、手机端h5页面中输入法键盘会遮挡输入框的问题。       $('input').on('focus',function(event){              //自动反弹 输入法高度自适应         var target = this;         setTimeout(function

github_turboemily的博客 2万+

ios手机微信打开h5 页面让键盘顶起来了

在微信中打开h5页面,点击input 输入框,弹出键盘会把整个页面顶到上面去,当键盘关闭的时候,页面并没有恢复原状,底部出现了一大块空白! 我解决的这个方法是在input失去焦点的时候让页面滚动条回到顶部 $("input").on('blur', function () { window.scroll(0, 0); }) ...

Mr_wuying的博客 885

html5浮动层弹窗

这是一款利用jQuery和CSS3实现的自定义弹出窗口,这可比浏览器默认的弹出窗口漂亮多了。弹出窗口中可以自定义html,十分灵活。另外最重要的一个特点是,它利用了jQuery和CSS3可以实现很多种弹出窗口动画效果,挺酷的

点击图片弹出浮层

类似QQ空间相册一样,点击图片,弹出浮层,显示放大图片,左右可切换图片

简洁验证码输入框—— VerificationCodeInput 使用教程

简洁验证码输入框—— VerificationCodeInput 使用教程 项目介绍 VerificationCodeInput 是一个简洁且高度可定制的验证码输入控件,由刘光利开发并托管在 GitHub。该库允许开发者轻松集成验证码输入界面,支持动态设置输入框的数量和样式。它简化了传统验证码输入过程的实现,提供了监听输入完成的接口,并允许自定义输入框的正常状态与聚焦时的背景样式。 项目快速启动 ...

gitblog_00044的博客 635

HTML5 虚拟键盘出现挡住输入框的解决办法

话不多说,请看代码: //防止键盘把当前输入框给挡住 $$('input[type="text"],textarea').on('click', function () { var target = this; setTimeout(function(){ target.scrollIntoViewIfNeeded(); },100); }); 部分安卓机型适用。 if(/Android [4-6]/.test(navigator.appVersion)) { window.addEventListener("resize", function() {

安卓端嵌套h5-键盘遮挡h5底部input且不触发onresize

解决方案:安卓端监听键盘主动触发h5方法

个人博客 2435

文献阅读笔记:量子微波测量技术综述

量子微波测量技术研究进展:量子微波测量技术利用里德堡原子与微波电场的相干相互作用,突破了传统测量方法的物理限制。该技术基于电磁诱导透明效应和里德堡原子能级跃迁原理,通过激光激发原子并监测光谱变化来测量微波电场强度。相比传统方法,量子微波测量具有超高灵敏度(理论极限可达nV/cm)、宽动态范围(超过100dB)、小型化等显著优势,且测量结果可直接溯源至普朗克常数。典型实验系统包括光源、原子气室和探测器,采用光谱法、干涉法等多种测量方法。近年来,该技术在基础研究和应用方面取得重要进展,展现出在通信、雷达、计量等

Grow into a more wonderful you 988

NSGA(非支配排序遗传算法)

在多目标优化问题中,往往存在多个相互冲突的目标需要同时优化。传统的单目标优化算法无法直接应用于这类问题,因此需要专门的多目标优化算法。非支配排序遗传算法(Non-dominated Sorting Genetic Algorithm,NSGA)是一种经典的多目标优化算法,由印度科学家 Kalyanmoy Deb 等人于 1995 年提出。NSGA 通过非支配排序和拥挤度距离来引导种群向 Pareto 最优前沿进化,从而得到一组具有良好分布性和收敛性的 Pareto 最优解。

2969

IOS遇到的几个H5坑、h5键盘弹起遮挡输入框的处理

原因分析:通常我们习惯用height属性设置行间的高度和line-height属性设置行间的距离(行高),当点击输入的时候,光标的高度就自动和父盒子的高度一样了。(谷歌浏览器的设计原则,还有一种可能就是当没有内容的时候光标的高度等于input的line-height的值,当有内容时,光标从input的顶端到文字的底部)问题描述:在ios端,上下滑动页面时,如果页面高度超出了一屏,就会出现明显的卡顿,页面有部分内容显示不全的情况,例如下图,右图是正常页面,边是ios上下滑动后,卡顿导致如左图下面部分丢失。

Bynine9的博客 5434

微信小程序OCR身份证识别实战:从拍照到信息提取全流程解析

本文详细解析了微信小程序中OCR身份证识别的全流程实现,从环境配置、拍照上传到OCR核心识别及安全优化。通过微信开发者工具和OCR插件,开发者可快速构建高效的身份信息采集系统,提升用户体验和数据安全性。重点介绍了图像处理、加密传输及混合云架构等企业级解决方案。

j0k1l2m3n的博客 458

H5页面键盘弹出,遮挡输入框问题(转文)

一、首先H5端,js需要监听输入框事件: //判断android版本强制滚动 if(/Android [4-6]/.test(navigator.appVersion)) { window.addEventListener("resize", function() { if(document.activeElement.tagName=="INPUT" || ...

weixin_30470857的博客 1237

从零上手HiAgent:构建能听懂指令的智能体框架实战指南

智能体(Agent)作为人工智能领域的重要范式,正从传统的预设流程自动化转向以目标驱动的自主规划与执行。其核心原理在于利用大语言模型(LLM)作为决策大脑,通过任务规划、工具调用与记忆机制,将模糊的自然语言指令转化为可执行的工作流。这一技术显著提升了人机协作的效率和自然度,其价值在自动化办公、数据分析与智能流程编排等场景中尤为突出。本文聚焦于HiAgent这一具体框架,深入解析其作为智能体开发平台的核心架构,涵盖规划器、执行器、工具集等关键组件,并提供从环境配置、自定义工具开发到复杂任务链构建的完整工程实践

weixin_29266007的博客 881

cmu15445(2024fall) project 2

project 2比p1难度要更大,代码量更大且涉及的知识更多,实现中出现的bug更多,好在是最后全部解决了。我最大的收获在于对于多线程编程的理解更深入了,实际发现解决了多个多线程相关的bug,学会了更多多线程下debug的技巧方法,也见识了更多多线程的bug情况。在之后可以更系统的学习一下多线程编程。同时学会实现B+树也是需要掌握的基础。

Jerome_Yi的博客 1556

js手机键盘遮挡_移动端页面input输入框被键盘遮挡问题

提交vheader, footer, main {display: block;}header {position: fixed;height: 50px;left:;right:;top:;}footer {position: fixed;height: 34px;left:;right:;bottom:;}main {margin-top: 50px;margin-bottom: 34px;h...

weixin_33773996的博客 1669

【STM32 CubeMX】I2C中断方式与DMA方式

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可以采用中断方式或DMA(Direct Memory Access)方式。中断方式通过触发中断来处理数据传输,而DMA方式则利用直接内存访问技术来实现数据传输,减轻了CPU的负担。在选择I2C通信方式时,开发者需要根据具体的应用需求和性能要求来选择合适的方式。STM32 CubeMX提供了图形化配置工具,使得配置I2C通信方式变得更加便捷。

m0_62599305的博客 7744

H5页面ios键盘遮挡input问题

完美方案// 解决输入法被激活时 底部输入框被遮住问题 <textarea type="text" value="" ref="textarea" v-model="newMsg" v-on:focus="focusIpt" v-on:blur="blurIpt" rows="1" /> data(){ return{

越思考越清晰 3794

高通开发系列 - Camera之摄像头调试记录

记录一些调试内容

fulinux的博客 1216

软件测试面试题之易错题

(1)白盒测试:又称功能功能 测试、数据驱动测试和行为测试,是一种从用户观点出发的测试,被测程序为黑盒子, 通过测试来检测每个功能是否能够正常使用。(2)黑盒测试:又称结构测试和逻辑驱动 测试,是知道产品内部工作过程,通过测试来检测产品内部动作是否按照规格说明书 的规定去正常运行。(1)、测试需求分析;(2)动态白盒测试:需要对各个模块功能、模块间的接口、局部数据结构、主要执行路径、 错误处理等方面的测试。(2) 集成测试所测试的对象是模块间的接口,其目的是在找出在模块接口上面,包括整体体系结构上的问题;

m0_37449634的博客 678

h5底部输入框被键盘遮挡_微信 H5 页面兼容性解决方案

最近给公司微信公众号,写了微信h5业务页面,总结分享一下前端开发过程中的几个兼容性坑,项目直接拿的公司页面,所以下文涉及图片都模糊处理了。1、ios端兼容input光标高度问题详情描述:input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上当点击输入的时候,光标的高度和父盒子的高度一样。例如下图,左图是正常所期待的输入框光标,右边是ios的input光标。出现原因分析:通常我们...

weixin_39528029的博客 1424

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

H5 IOS input输入框唤起键盘导致页面元素位置错乱问题

方法1:vue项目 // 输入框获得焦点时触发 focus() { this.timer.T = setInterval(() => { // 完美解决输入框被软键盘遮挡 this.$refs.footer.scrollIntoView(false) }, 200) }, blur() { // ...

qq_37942845的博客 6904

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS客户端内H5页面的input输入框聚焦唤起键盘后,点击其他按钮唤起confirm框会导致键盘遮挡问题

iOS客户端内H5页面的input输入框聚焦唤起键盘后,点击其他按钮唤起confirm框会导致键盘未收回,遮挡到confirm弹窗

Edward要加油哦 1186

H5移动端底部input唤醒手机软键盘遮挡输入框问题解决办法

// An highlighted block <input type="text" value="" class="tinput" />; //针对直接在浏览器打开此方法有效 $(".tinput").bind("focus", function () { // 软键盘弹起之后再调整滚动条位置 if ($(this).offset().top > document.body.scrollHeight / 2) {

s_unny_wang的博客 535

h5键盘遮挡输入框

h5遮挡键盘输入框 scrollintoview

zona 9491
上一篇: async await 的异常捕获
下一篇: react native 浮层 键盘遮挡
gaunjia
博客等级 码龄13年 6粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值