uni-app input @focus 事件第一次获取高度不准确
uni-app input @focus 事件第一次获取高度不准确
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 10.15.5 | HBuilderX |
操作步骤:
- 启动app
- 点击输入框,取的值是119
- 输入框失去焦点,再点击输入框,取的值是411
- 以后无论点击多少次输入框,取的都是411
预期结果:
取的值是411
实际结果:
app启动后第一次取的值是119
bug描述:
<input [@focus](/user/focus)="test" :adjust-position="false" />
test: function(e) {
console.log(e.detail.height);
}
test方法第一次获取到的数值是119,之后再触发获取的就是正常值411,正常就应该是411,只是在app第一次启动后,获取的值是119,跳转到其他页面,再回到这个页面,取的值一直是411。问题就是出在第一次启动app
更多关于uni-app input @focus 事件第一次获取高度不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
你好,反馈的是 nvue 页面,但是示例里面提供的是 vue , 使用提供的示例工程无论是vue还是nvue都没有复现问题,每次返回的高度都是一样的那。。。
更多关于uni-app input @focus 事件第一次获取高度不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你试试搜狗输入法,是不是输入法的问题
我测的是vue和nvue都有问题
这是一个已知的uni-app平台差异问题,在App端首次触发@focus事件时,键盘高度计算可能不准确。建议通过以下方式解决:
- 使用
uni.onKeyboardHeightChange监听键盘高度变化:
onLoad() {
uni.onKeyboardHeightChange(res => {
this.keyboardHeight = res.height
})
}
- 添加延迟处理:
test: function(e) {
setTimeout(() => {
console.log(e.detail.height)
}, 100)
}
- 使用数据缓存记录正确高度:
test: function(e) {
if(e.detail.height < 200) return // 过滤异常值
uni.setStorageSync('keyboardHeight', e.detail.height)
}

