微信小程序键盘弹起时,底部输入框抬起至键盘上方,顶部导航栏固定不动

一 . 需求描述 :

在微信小程序中,常见的页面布局是顶部导航栏和底部输入框固定不动,中间内容部分自适应。但是当键盘弹起时整个页面被挤压,导致元素上移或被覆盖,业务希望在这种情况下,输入框能自动抬起至键盘上方,顶部导航栏保持固定,不被顶上去。效果如图所示:

二 . 错误处理方案:

**方案1:**直接在textarea组件中设置cursor-spacing="100",这样当键盘弹时,输入框虽然在键盘上方,但是顶部导航栏也被顶上去了,效果如图一:

**方案2:**直接在textarea组件中设置adjust-position="{{false}}",这样当键盘弹起时,虽然顶部导航栏固定不动,但是底部输入框被键盘遮挡,效果如图二:

三 . 正确处理方案:

1.定义底部输入框外层view距离底部距离的变量inputBoxBottom:

css 复制代码
data:{
  inputBoxBottom:0
}

2.在页面的onLoad生命周期中监听键盘事件,记录键盘弹起的高度,并将高度赋值给inputBoxBottom

typescript 复制代码
 onLoad(options: any) {
    wx.onKeyboardHeightChange((res) => {
      const height = res.height;
      if (height > 0) {
        this.onKeyboardShow(height);
      } else {
        this.onKeyboardHide();
      }
    });
  },
onKeyboardShow(height: number) {
    this.setData({
      inputBoxBottom: height,
    });
},
onKeyboardHide() {
    // 处理键盘收起逻辑
    this.setData({
      inputBoxBottom: 0,
    });
}

3.将inputBoxBottom变量设置给底部输入框外层的view标签:

ini 复制代码
<view class="input-box" style="bottom:{{inputBoxBottom}}px"></view>

4.设置textarea标签adjust-position="{{false}}",保证键盘弹起时,页面不会被顶起,只是底部输入框bottom变化而使输入框抬起至键盘上方:

css 复制代码
<textarea adjust-position="{{false}}" ></textarea>
相关推荐
爱分享的程序员21 分钟前
前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
前端·javascript·node.js
翻滚吧键盘27 分钟前
vue 条件渲染(v-if v-else-if v-else v-show)
前端·javascript·vue.js
vim怎么退出28 分钟前
万字长文带你了解微前端架构
前端·微服务·前端框架
你这个年龄怎么睡得着的28 分钟前
为什么 JavaScript 中 'str' 不是对象,却能调用方法?
前端·javascript·面试
Java水解31 分钟前
前端常用单位em/px/rem/vh/vm到底有什么区别?
前端
CAD老兵34 分钟前
Vite 如何借助 esbuild 实现极速 Dev Server 体验,并支持无 source map 的源码调试
前端
南屿im35 分钟前
JavaScript 手写实现防抖与节流:优化高频事件处理的利器
前端·javascript
Spider_Man35 分钟前
从零开始构建React天气应用:API集成与UI设计全指南 🌤️
前端·react.js
浩浩测试一下1 小时前
渗透信息收集- Web应用漏洞与指纹信息收集以及情报收集
android·前端·安全·web安全·网络安全·安全架构
西陵1 小时前
Nx带来极致的前端开发体验——借助CDD&TDD开发提效
前端·javascript·架构