小程序底部input输入框,键盘弹起时页面整体上移问题解决

场景

存在问题:
小程序中,当input输入框位于页面底部时,输入框聚焦后键盘弹起,页面会整体上移,将输入框所在位置定位到键盘上方(图2)

解决思路:
键盘弹起时,页面其他元素不动不动,底部输入框跟随键盘上弹(图3)

效果图对比:
在这里插入图片描述

实现思路

1、input设置属性 :adjust-position=“false”,键盘弹起时,不上推页面
2、创建bottom变量,动态设置输入框距离底部的距离
2、input获取焦点事件中,监听键盘高度,赋值给bottom属性
3、input失去焦点事件中,监听键盘高度,重置bottom值为0

参考文档:adjust-position属性了解

注意:
由于获取的系统的尺寸单位都是 px ,给 bottom 设置的值单位也需要使用 px

代码示例:

html

<view class="message-input" :style="`bottom: ${bottom}px`">
  <!-- inner -->
  <view class="message-inner">
    <view class="icon-message" @click="openMessage"></view>
    <input
      type="text" 
      v-model="inputText" 
      placeholder="请输入" 
      :adjust-position="false" 
      @input="inputValueChange"
      @focus="inputBindFocus" 
      @blur="inputBindBlur" />
    <view class="icon-send"></view>
  </view>
  
  <!-- input未聚焦时,UI样式适配,底部增加32rpx -->
  <view v-if="bottom == 0" style="height: 32rpx;"></view>
</view>

js

export default {
  data() {
    return {
      bottom: 0, // 输入框距离页面底部距离(键盘高度px)
      inputText: '' // 输入框内容
    }
  },
  methods: {
    inputValueChange() {},
    inputBindFocus(e) {
      this.bottom = e.detail.height
    },
    inputBindBlur() {
      this.bottom = 0
    }
  }
}

css

.message-input {
  position: fixed;
  left: 0;
  // bottom: 0;
  z-index: 10;
  width: 750rpx;
  padding: 26rpx 36rpx;
  background: #FFFFFF;
  box-shadow: 0rpx 0rpx 17rpx 0rpx rgba(0, 26, 99, 0.1);
  border-radius: 48rpx 48rpx 0rpx 0rpx;
  
  .message-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
      
    .icon-message {
      width: 56rpx;
      height: 56rpx;
      background: url($oss-icon-message) no-repeat top left;
      background-size: 56rpx;
    }
      
    .icon-send {
      width: 88rpx;
      height: 88rpx;
      background: #4989FF url($oss-icon-send) no-repeat center;
      background-size: 56rpx;
      border-radius: 44rpx;
    }
      
    >input {
      width: 478rpx;
      height: 88rpx;
      padding: 0 20rpx;
      background: #EEF1F5;
      border-radius: 22rpx;
    }
      
  }
    
}
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在微信小程序开发中,如果在iOS手机上遇到了键盘弹起会遮挡上面内容的问题,可以通过以下方法解决。 首先,我们需要获取键盘的高度。在小程序中,可以使用wx.getSystemInfoSync()方法来获取系统信息,其中包括键盘的高度。 接下来,我们需要监听键盘弹起和隐藏事件。可以通过监听页面的focus和blur事件来实现。当input框被选中(focus事件),我们可以将页面整体上移一个键盘高度的距离,以保证输入框不被键盘遮挡。当input框失去焦点(blur事件),我们将页面恢复到原始位置。 具体实现,可以在页面的onLoad生命周期函数中调用wx.getSystemInfoSync()方法获取系统信息,并存储键盘的高度。然后在页面的focus和blur事件中分别设置页面的上下边距,以达到上移和恢复的效果。 示例代码如下: ``` // 在页面的onLoad生命周期函数中获取系统信息 onLoad: function() { var that = this; wx.getSystemInfoSync({ success: function(res) { that.setData({ keyboardHeight: res.windowHeight * 0.75 // 假设键盘高度占屏幕高度的3/4 }); } }); }, // input框获取焦点的事件处理函数 onFocus: function() { this.setData({ marginTop: -this.data.keyboardHeight }); }, // input框失去焦点的事件处理函数 onBlur: function() { this.setData({ marginTop: 0 }); } ``` 需要注意的是,根据不同手机型号和键盘设置的不同,键盘的高度可能会有所差异,因此上述代码中获取到的键盘高度是一个近似值,可以根据实际情况进行调整。 以上是解决微信小程序开发中iOS手机键盘弹起会遮挡上面内容的一种方法,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值