【小程序】文本框聚焦时,弹出的键盘遮挡住文本框如何处理
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
需求
现在需要实现一个功能当在微信小程序点击聚焦输入框时页面自动滚动使输入框显示在弹出的键盘上方避免被键盘遮挡。
iso的微信小程序自带这个优化不需要额外处理。
安卓或其他系统的微信小程序需要这个处理。
实现方法
通过input的聚焦事件触发计算页面滚动达到效果定位滚动位置的需求使用的参数scroll-top来实现
代码
<scroll-view
:scroll-top="curScrollTop "
scroll-y="true"
@scroll="scroll"
show-scrollbar
:style="{ height: height }"
>
<input class="my-input" @focus="inputFocus"></input>
</scroll-view>
//页面滚动时记录滚动高度
scroll(e) {
this.curScrollTop = e.detail.scrollTop;
},
//聚焦事件
inputFocus(e,index) {
let _this = this;
const query = wx.createSelectorQuery();//这里有坑如果输入框在子组件里需要使用uni.createSelectorQuery().in(this.$refs.fault.$refs.MyTextarea[index])这种方法来定位到其组件内的作用域
query
.select(".my-input")//通过类名获取输入框
.boundingClientRect((data) => {
console.log(_this.scrollTop);
console.log("得到布局位置信息" + JSON.stringify(data));
console.log("节点离页面顶部的距离为" + data.top);
uni.getSystemInfo({
success: function (res) {
const platform = res.platform.toLowerCase();
if (platform === "ios") {
console.log("当前设备是iOS");
//ios不做任何处理
} else {
console.log("当前设备不是iOS");
if (data.top > 200) {
//不是ios时处理滚动高度
_this.scrollTop = _this.curScrollTop + data.top - 200;
}
}
},
});
})
.exec();
}
坑
如果输入框位于子组件而非处理滚动事件的组件内 const query = wx.createSelectorQuery()的方法定义query将会找不到输入框元素需要使用uni.createSelectorQuery().in(this. r e f s . f a u l t . refs.fault. refs.fault.refs.MyTextarea[index])这样类似的语句先定位到输入框所在的子组件
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |