uniapp点击输入框时键盘不上推页面

这篇具有很好参考价值的文章主要介绍了uniapp点击输入框时键盘不上推页面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

adjust-position设置为false,然后监听键盘的高度赋值给输入框bottom

这里还一个非常重要的地方,在根元素设置@touchmove.stop.prevent,这样在ios上页面就不会滚动,不影响其他组件内部滚动

onReady() {
  // 监听键盘高度变化,以便设置输入框的高度
  uni.onKeyboardHeightChange(res => {
    this.inputOffsetBottom = res.height
    if (res.height === 0) {
      this.focus = false
    }
  })
},

<input
  v-model="commentValue"
  :style="{bottom: inputOffsetBottom > 0 ? inputOffsetBottom + 'px' : '0'}"
  :disabled="setDisabled"
  :adjust-position="false"
  :cursor-spacing="20"
  :placeholder="placeholderText"
  type="text"
  class="lp-comment-input"
  confirm-type="send"
  @focus="onInputFocus"
  @blur="onInputBlur"
  @confirm="onInputEnter"
  @keyboardheightchange="onKeyBoardHeightChange"
/>

一,页面结构设计
先来看看聊天页面结构设计,外层布局如下:

<template>
    <view>
        <!-- 消息列表 -->
        <scroll-view class="msg-list" scroll-y="true">
        </scroll-view>
        
        <!-- 底部输入栏 -->
        <view class="input-box">
            <input :adjust-position="false"/>
        </view>
    </view>
</template> 


之后底部这个输入栏,我们不要使用fixed定位,而是直接按照文档流排列,那如何让输入栏一直在最下面呢,这就是我们下一步操作啦。

注意:这里的input或者textarea需要设置一个:adjust-position="false"的属性,不然页面就会上推

二,定义消息列表高度
我们需要获取屏幕高度,然后使“消息列表”的高度为屏幕高度减去底部输入栏高度

<!-- ...... -->
    <!-- 消息列表 -->
    <scroll-view class="msg-list" scroll-y="true" :style={ height: msgListHeight }>
    </scroll-view>
<!-- ...... --> 
onLoad() {
    // 獲取並設置屏幕高度
    uni.getSystemInfo({
        success: res => {
            this.screenHeight = res.windowHeight
            // 100为底部输入栏高度,单位rpx,需要先转成px
            this.msgListHeight = this.screenHeight - uni.upx2px(100)
        }
    })
}

 
三,监听键盘高度变化事件
下一步,需要监听键盘高度变化事件,并且动态设置消息列表高度

 
onReady() {
    // 监听键盘高度变化,以便设置输入框的高度
    uni.onKeyboardHeightChange(res => {
        let keyBoardHeight = res.height
        // 100为底部输入栏高度,单位rpx,需要先转成px
        this.msgListHeight = this.screenHeight - keyBoardHeight - uni.upx2px(100)
    })
},
 


四,优化
做到以上三步一般可以解决上面页面上推问题,剩下的就是不同项目不同的优化方案啦。
 

-------------------------------------------------------------------------

3、遇到问题
  当我获取键盘高度定位时,发现底部定位的元素总是跟软键盘间隔一段距离。安卓和ios手机均是如此。就如这样:

4、问题原因
  这是因为手机屏幕底部存在虚拟键位,虚拟键位是占了软键盘高度,占了屏幕高度,但是不占屏幕可使用窗口高度的

5、解决方案
  知道了原因,其实问题就很好解决了。

  uni.getSystemInfo(OBJECT):获取系统信息。

  我们可以通过该接口获取到系统信息里的:screenHeight(屏幕高度)、windowHeight(可使用窗口高度)

  两者相减即为虚拟键位高度:keyHeight = screenHeight - windowHeight

  然后获取到的软键盘高度 减去 虚拟键位高度即可得到定位的高度

setKeyHeight(obj) {
  let _sysInfo = uni.getSystemInfoSync()
  let _heightDiff = _sysInfo.screenHeight - _sysInfo.windowHeight
  let _diff = obj.height - _heightDiff
  this.keyHeight = _diff > 0 ? _diff : 0
 
  在iphone上有这样的问题,就是上面的obj.height在键盘隐藏时为0,这个时候就会出现负值,所以需要判断下
 文章来源地址https://www.toymoban.com/news/detail-636580.html

到了这里,关于uniapp点击输入框时键盘不上推页面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue移动端车牌号输入键盘组件封装(支持新能源车牌和uniapp)

    一、效果图            二、说明 支持点击输入框删除或输入车牌,可直接在uniapp项目中运行,将view标签换为div、并且将rpx单位换成px可在vue项目里运行  三、代码

    2024年02月14日
    浏览(39)
  • 【项目复盘Vue2-移动端】IOS使用Vant表单组件输入框获取焦点后放大页面,安卓软键盘遮挡问题

    使用Vue+Vant做的移动端项目,在登录界面使用Vant的表单组件van-input时发现在真机测试IOS会出现获取焦点输入时会撑大原页面的宽度,每一个输入框获取到焦点就会页面就会放大一点点,需要双指缩放才能回到原来的比例。 经过一番百度后发现: 在移动端开发项目中,发现页

    2024年02月12日
    浏览(69)
  • android 点击输入框editText后点击textview会弹出软键盘问题解决

    在 Android 中,当一个 EditText 或其它可以输入文本的控件获取焦点时,系统会自动弹出软键盘以便用户输入。当软键盘弹出后,点击其它控件,比如 TextView,也会触发 EditText 失去焦点的事件,从而导致软键盘关闭。这是 Android 系统默认的行为。 但是,在某些情况下,用户希望

    2024年02月15日
    浏览(56)
  • Flutter 点击输入框后 键盘闪出后立刻消失

    flutter 在布局最顶端使用的是Scaffold组件,在点击输入框键盘弹出后,布局的默认反应是改变屏幕大小重新布局。 这时通常会在Scaffold中添加选项: resizeToAvoidBottomPadding:false 添加之后,应用整体布局不会随着键盘弹出而刷新改变。 但是键盘的弹出仍然会改变 MediaQuery.of(contex

    2024年02月09日
    浏览(44)
  • 【uniapp】uniapp实现input输入显示数字键盘:

    一、官网文档: input | uni-app官网 二、文档: 三、效果: 【1】number:iPhone原生数字键盘不显示小数点 【2】digit: 【3】digit和inputmode:

    2024年02月06日
    浏览(48)
  • 解决Windows系统远程登陆后vscdoe无法输入字符,键盘没有反应,鼠标可以点击,没有反应

    使用vscode编译器时,通过远程登录或者屏幕锁屏解锁后,vscode出现无法输入字符内容,但vscode没有死机,切换到其他软件的窗口再切换回来后,可以使用鼠标点击,但是只要使用键盘输入就会又出现卡死的现象。 这个问题我已经遇到两年多了,一直没有解决,在vscode的git仓库

    2024年02月07日
    浏览(76)
  • uniapp,app端时input组件弹起系统键盘时,键盘会顶住页面导致页面会上移

    这个时候,我们可以修改键盘的弹出模式。 App平台软键盘弹出有 adjustResize|adjustPan 两种模式,默认为 adjustPan 模式,小程序平台只支持 adjustPan 模式,H5平台因不同浏览器而异 配置方式,在 pages.json 中配置 style 官方描述:修改系统键盘的模式

    2024年01月18日
    浏览(42)
  • mac 删除自带的ABC输入法保留一个搜狗输入法,搜狗配置一下可以减少很多的敲击键盘和鼠标点击次数

    对于开发者来说,经常被中英文切换输入法所困扰,我这边有一个方法,删除mac默认的ABC输入法 仅仅保留搜狗一个输入法,配置一下搜狗输入:哪些指定为英文输入,哪些指定为中文输入(符号也可以指定) 重启系统,按住 Command + R 进入恢复模式。 点击顶部菜单栏 实用工

    2024年02月15日
    浏览(48)
  • uniapp,销毁上一个页面,点击返回不返回到上一个页面

    我们遇到A页面到B页面再到C页面的时候 在C页面点击返回但是却返回到了B页面,这个时候我们想销毁上一个页面就是B页面,直接到C页面的时候。这个在uniapp里面可以通过以下以下一种判断跳转页面的方式来完成. 比如当我们到商品详情,A页面, 点击购买,到了B页面, 点击支

    2024年02月11日
    浏览(36)
  • uniapp中点击跳转到tabBar的页面

    今天在工作中用到需要从pages页面点击按钮跳转到底部栏的tabBar页面中的情况 最初代码是这样写的,路径正确,微信开发者工具也没有报错,但就是页面不跳转  后来经过阅读uniapp的官方文档,找到了从普通页面点击跳转至tabBar页面的方法:switchTab 话不多说,直接上代码,调

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包