uni-app uni-popup中uni-easyinput第二次聚焦时会推动页面滚动
uni-app uni-popup中uni-easyinput第二次聚焦时会推动页面滚动
操作步骤:
- 点击评论,弹出popup,input设置的自动聚焦。点击popup背景区域关闭popup,再次点击评论,popup弹出并自动聚焦
预期结果:
- 底部页面保持当前位置
实际结果:
- 页面被向上推动了一段距离
bug描述:
首次打开popup并让input聚焦页面状态正常。 但是关闭popup后,再次打开popup并让input聚焦页面会向上推送,已配置
"app-plus":{
"softinputMode": "adjustResize"
}
有什么禁止滚动的方法可以参考 uni-popup 并不能完全阻止页面滚动,可在打开 uni-popup 的时候手动去做一些处理,禁止页面滚动 代码视频见附件
附件:
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 10 | HBuilderX |
| Android | 11 | |
| 小米 | miui12.5.21.11.3开发版 | |
| HBuilderX | 3.2.16 | |
| Vue | vue2 |
更多关于uni-app uni-popup中uni-easyinput第二次聚焦时会推动页面滚动的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
看subNvue的时候受到了这个插件的启发,倒是可以通过一个页面的方式进行处理。全局弹窗示例
更多关于uni-app uni-popup中uni-easyinput第二次聚焦时会推动页面滚动的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的uni-app软键盘交互问题。在Android平台上,当adjustResize模式下多次触发输入框聚焦时,系统可能会错误计算滚动位置。
解决方案:
- 临时禁止页面滚动(推荐):
// 打开popup时
onPopupOpen() {
// 禁止页面滚动
uni.pageScrollTo({
scrollTop: 0,
duration: 0
});
// 或设置页面overflow
const pages = getCurrentPages();
const page = pages[pages.length - 1];
page.$el.style.overflow = 'hidden';
}
// 关闭popup时恢复
onPopupClose() {
const pages = getCurrentPages();
const page = pages[pages.length - 1];
page.$el.style.overflow = '';
}
- 使用
adjustPan模式替代:
"app-plus": {
"softinputMode": "adjustPan"
}
注意:adjustPan模式下页面不会自动调整,可能遮挡输入框。
- 手动控制滚动位置:
在input聚焦后,通过
uni.pageScrollTo将页面滚动回原位置:
onFocus() {
setTimeout(() => {
uni.pageScrollTo({
scrollTop: this.originalScrollTop,
duration: 0
});
}, 100);
}

