React WebApp键盘遮挡输入框?

2023-11-18

写在前面:

由于近期工作实在太忙,正在赶项目,抽不出时间整理平时遇到的坑,隔了很长时候没有给大家更新文章了,这次正好利用这个单休的时间写一篇开发时遇到的坑。大家如果有什么好的建议和意见欢迎投递哦,邮箱:lcczmy@163.com

本人使用的输入框有两种来源,1.自定义input组件,2.阿里的antd-mobile组件库中的输入框组件。发现都存在输入框被键盘遮挡的问题。

原因分析:

这个问题经过排查发现:之所以输入框不能够被键盘顶上去,是因为页面的可滑动区域太小导致页面无法滑动。那你可能会问:我用同样的页面在不同浏览器打开,输入框获得焦点时为何能够将输入框顶上去呢?这个问题的原因还需进一步研究,那么就目前来说,使用react打出来的包确实存在该问题。这篇文章会尽量帮大家使用最简单的方案解决该问题。

解决方案:

上面已经提到了导致原因,问题是因为页面高度不够而导致页面无法滑动才使得输入框无法被顶上去。
讲到这里你可能已经知道怎么做了!
是的,增加页面的高度。我采用在页面底部添加空元素div的方式,增加页面高度。
试想一下,一个WebApp中用到输入框的地方可能非常多,如果每个页面都从新写一遍那岂不是太费劲了,这样也违背了react组件化编程的初衷不是?so,这里会将该提出一个公共组件(虽然内容很简单,为了以后使用方便)。

创建好公共组件(BounceSpace):

export  default class BounceSpace extends Component {
    constructor(props) {
        super(props);
        this.state = {
            isShowBounce: this.props.params.isShowBounce? {display:'block'} : {display:'none'},
            classNameStr:"public-bounce-space "+ (this.props.params.className? this.props.params.className : "" ),
        };
    }
    componentDidMount() {
    }
    componentWillReceiveProps(nextProps) {
        this.setState({
            isShowBounce: nextProps.params.isShowBounce? {display:'block'} : {display:'none'},
            classNameStr:"public-bounce-space "+ (nextProps.params.className? nextProps.params.className : "" ),
        });
    }
    render() {
        return (
            <div className = 'bounce-space-content' style={this.state.isShowBounce}>
                <div className={this.state.classNameStr} ></div>
            </div>
        );
    }

}
export  default BounceSpace;

代码解释:

isShowBounce用于控制是否显示该组件,使用display
控制显示还可以使用如下方式

{flag &&<BounceSpace />}

classNameStr用于提供自定义样式,例如根据不同手机上软键盘的高度

这个组件很简单,就是一个有高度的div而已。用的时候直接导入即可,通过一个标记,来控制是否显示。

例如上面props.params.isShowBounce,或者flag,这两个值为true控制显示,为false进行隐藏该组件,将该组件放到页面元素最底部,进而增加页面长度。

显示的时候不用问,肯定是输入框获得了焦点吧,此时将该标记设置成true,显示出来。当输入框失去焦点时再将该标记设置成false进行移除。
个人推荐使用阿里家的antd-mobile中的input组件,为什么呢?那里已经给你写好了焦点回调函数,绝对比自己封装input写的好用(可能需要你自定义一下人家的样式哈),反正我是将自己的组件改成阿里的了。

思考一下,失去焦点时为啥还要移除这个组件呢?
原因:如果不移除的话,当键盘收起时,页面滑到底部会有很大一个空白,明明没有内容了为何还要给予滑动呢?市场上的APP都不会存在这样的东东吧?所以最好控制移除。

由于软键盘的高度各个手机中可能不一样,设置底部div的高度可通过那个自定义样式进行处理。

组件样式:

@import "../../style/val.scss";
.bounce-space-content {
  .public-bounce-space{
    position: relative;
    height: 5.69rem;
    width: 100%;
  }
}

思考:如果存在某种可能,输入框还是无法被顶上去该怎么办呢?请关注下期更新!

由于本人工作原因时间有限,终极版解决方案请移步到 前端e家 公众号历史文章:
第8期《React WebApp输入框遮挡问题(终极版)!》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React WebApp键盘遮挡输入框? 的相关文章

  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • 如何在react-native中获取Text组件的onPress值

    我是一名新的 React Native 开发人员 我想使用 onPress 获取 Text 组件的值并将其传递给函数
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中

随机推荐

  • 中小企业如何低成本实施MES管理系统

    中小企业在市场竞争中需要有高效的管理体系来支持其运营和发展 中小企业MES管理系统是一种先进的管理系统 可以提升工厂智能化水平 提高生产效率 是中小企业必须采取的有效管理工具 然而 由于资金和技术的限制 中小企业往往难以承担高额的软件购置和
  • yocto编译常见问题及解决方法

    1 opt yocto rel share downloads exists but you do not appear to have write access to it 这个是没有权限往指定的目录里写 解决方法 将build目录下对应
  • oralce 超出表空间限额问题

    oralce 超出表空间限额问题 Pl sql建表时报 超出表空间限额 的错误 检查表空间 只占了3 的空间 最后经提醒原来是数据库用户默认只有15M的空间 最后通过修改用户的权限 不限制存储空间 解决问题 来自 ITPUB博客 链接 ht
  • 【VSCode】推荐一款Microsoft Visual Studio Code能在编辑器内智能补全代码的插件 - Tabnine AI

    Tabnine AI Autocomplete for Javascript Python Typescript PHP Go Java Ruby more Tabnine是一个AI代码补全插件 支持JavaScript Python Ja
  • openGL之API学习(一九四)glGenTextures glActiveTexture

    glGenTextures产生的是一个比较小的整数id 纹理单元名 glActiveTexture激活的是纹理单元号 GL TEXTUREi 它们二者的关系为GL TEXTUREi GL TEXTURE0 id glBindTexture使
  • MySQL server has gone away (BrokenPipeError(32, 'Broken pipe'))[MySQL插入内容超过4M]

    MySQL server has gone away BrokenPipeError 32 Broken pipe MySQL插入内容超过4M Bug描述 用Python的pymysql向MySQL数据库insert插入数据时 遇到报错信息
  • 估算服务器处理数据性能,服务器性能计算方法-20210720074826.docx-原创力文档

    一 数据库服务器性能计算需求分析 考虑到广州市公安局超级情报系统 SIS 设备升级项目的数据库 服务器的性能 我们建议采用主流的TPC C值进行性能估算 TPC C 是一种旨在衡量联机事务处理 OLTP 系统性能与可 伸缩 性的行业标准基准
  • Multi-mode pattern generator

    Multi mode pattern generator verilog编写 支持如下模式 Full screen White Full screen Black Full screen Red Full screen Green Full
  • JAVA操作Excel时文字自适应单元格的宽度设置方法

    使用JAVA操作Excel通常都使用JXL 方法很简单网上也有很多的教程 然后往往一些细节性的问题却导致我们这些Programmer苦恼不已 这两天帮一个朋友做一个Excel表格自动生成的小软件 就遇到的类似的问题 问题描述 通过Java向
  • 不同数据库的validationQuery检查语句

    数据库 validationQuery Oracle select 1 from dual MySQL select 1 Microsoft SQL Server select 1 DB2 select 1 from sysibm sysd
  • LeetCode83: 删除排序链表中的重复元素

    给定一个已排序的链表的头 head 删除所有重复的元素 使每个元素只出现一次 返回 已排序的链表 示例 1 输入 head 1 1 2 输出 1 2 示例 2 输入 head 1 1 2 3 3 输出 1 2 3 提示 链表中节点数目在范围
  • ASP高级计划与排产简介

    ASP Advanced Planning and Scheduling 高级计划与排产是一种计算机化的制造计划和排程系统 旨在帮助制造商更有效地管理其生产过程 它可以通过对订单需求 库存水平 生产能力和物料供应等关键信息的实时跟踪和分析
  • Git Bash ssh远程连接kali linux

    操作步骤 查看本机IP地址等网络相关信息 ifconfig 开启ssh服务 该命令正常情况下没有回显 service ssh start 查看ssh服务是否正常开启 如果正常开启 则此时有 active running 的提示 servic
  • dynamic_cast报错 异常

    转载请标明是引用于 http blog csdn net chenyujing1234 代码 http www rayfile com zh cn files 89459c23 7a0b 11e1 908f 0015c55db73d UnH
  • RabbitMQ使用详解

    文章目录 RabbitMQ 一 简介 二 rabbitmq基本原理 三 安装 3 1安装erlang环境 3 2 安装rabbitmq 3 3 使用docker安装 四 RabbitMQ程序的编写 4 1 rabbitMQ支持的消息模型 4
  • ElementUI怎样修改组件的css样式?

    1 开发中遇到的问题 需求 修改elementUI 中 环形 progress 宽度 由于父容器的宽度不确定 不能使用 width 属性设置宽度值 html代码如下
  • 根据图片地址得到文件流

    得到文件流 param url 图片地址 return public static byte getFileStream String url try URL httpUrl new URL url HttpURLConnection co
  • Spring Boot入门必会(基本介绍+依赖管理+自动装配)

    目录 一 基础入门 1 Spring Boot 是什么 2 SpringBoot 快速入门 2 1完成步骤 2 2快速入门小结 3 Spring SpringMVC SpringBoot 的关系 3 1梳理关系 3 2如何理解 约定优于配置
  • 青少年ptyhon可以参加的主流比赛大全

    青少年python教学视频ppt源码 青少年python系列目录 老程序员115的博客 CSDN博客 一 全国青少年软件编程等级考试 主办单位 中国电子学会 全国青少年电子信息科普创新联盟 网址 http www qceit org cn
  • React WebApp键盘遮挡输入框?

    写在前面 由于近期工作实在太忙 正在赶项目 抽不出时间整理平时遇到的坑 隔了很长时候没有给大家更新文章了 这次正好利用这个单休的时间写一篇开发时遇到的坑 大家如果有什么好的建议和意见欢迎投递哦 邮箱 lcczmy 163 com 本人使用的