夜听城嚣 夜听城嚣
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏

dwfrost

前端界的小学生
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏
  • chrome控制台怎么复制对象
  • 小程序键盘弹起后顶起自定义导航问题
    • node子进程如何输出和关闭
    • 代理域名后webpack热更新失效及解决
    • 小程序scroll-view隐藏滚动条
    • npm包相关
    • electron下载慢解决
    • electron开发踩坑
    • mac升级后git找不到
    • electron打包找不到python
    • 安装imagemin-mozjpeg失败
    • 开发中的bug类型踩坑
    • 云端web项目开发踩坑
    • 如何快速定位bug
    • bug知多少
    frost
    2021-11-04

    小程序键盘弹起后顶起自定义导航问题

    本项目使用uni-app开发。

    # bug描述

    软键盘弹起时自定义顶部导航被顶出页面 (opens new window)

    软键盘弹起时自定义顶部导航被顶出页面 (opens new window)

    聚焦input或textarea组件时,键盘弹起会将自定义导航栏顶上去,小程序自带的不会。

    # bug解决

    参考软键盘弹起时页面上移 (opens new window)的思路,解决如下:

    1. 设置adjust-position属性为false。
    2. 监听keyboardheightchange事件,获取键盘高度。使用eventbus触发自定义事件keyboradChange。
    3. 监听blur事件,使用eventbus触发keyboradChange。
    4. 在页面最外层监听keyboradChange,设置页面的padding-bottom。

    完成。下面总结下

    # 总结

    1. 微信小程序提供2中键盘弹起方式,通过adjust-position来控制。
      1. 为true时,会自动上推页面,这个对于Input而言是符合用户预期的。因为通常用户输入的时候,希望可以实时看到输入后的文字。但缺点也很明显,它会将自定义导航也当做页面的一部分,会推出视图。
      2. 如果为false,键盘就相当于固定定位,如果input在最底部,则会被遮挡。
    2. 采用第二种方式来hack。需要做的是将input抬起来,前提是要知道键盘的高度。官方提供了bindfocus和bindkeyboardheightchange两种方式来获取键盘高度。
    3. 只需要将页面设置padding-bottom为键盘高度,就可以控制input的位置了。

    代码如下:

                <textarea
                    v-model="msg"
                    class="textarea"
                    type="text"
                    confirm-type="send"
                    cursor-spacing="15"
                    auto-height
                    :adjust-position="false"
                    :show-confirm-bar="false"
                    placeholder-class="textarea-placeholder"
                    :placeholder="placeholder"
                    maxlength="300"
                    @keyboardheightchange="onkeyboardheightchange"
                    @blur="onBlur"
                />
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            onkeyboardheightchange(e) {
                uni.$emit('keyboradChange', e.detail.height)
            },
            onBlur() {
                uni.$emit('keyboradChange', 0)
            },
    
    1
    2
    3
    4
    5
    6
    <template>
        <div class="chat-wrap" :style="{ paddingBottom: keyboradHeight + 'px' }">
            <Head />
            <MainView/>
            <InputView/>
        </div>
    </template>
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    // 设置页面padding-bottom
        data() {
            return {
                keyboradHeight: 0
            }
        },
        onShow() {
            // 处理键盘弹起后顶起自定义导航栏的问题
            this.keyboradHeight = 0
            uni.$on('keyboradChange', e => {
                this.keyboradHeight = e
            })
        },
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    上次更新: 2021/11/04, 20:03:22
    chrome控制台怎么复制对象
    node子进程如何输出和关闭

    ← chrome控制台怎么复制对象 node子进程如何输出和关闭→

    最近更新
    01
    提交代码时修改commit消息
    04-09
    02
    如何快速定位bug
    02-20
    03
    云端web项目开发踩坑
    08-25
    更多文章>
    Theme by Vdoing | Copyright © 2021-2025 dwfrost | 粤ICP备2021118995号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×