uni-app 安卓手动收起键盘后 触发touch事件会导致键盘弹出
产品分类
uniapp/App
示例代码:
<textarea @keyboardheightchange="keyboardheightchange" placeholder-class="placeholder" name="" id="" cols="30" rows="10" class="textarea" adjust-position="false" maxlength="400" v-model="sendForm.content"></textarea>
<view class="van-circle__text" @touchstart.prevent="voiceStart" @touchend.prevent="voiceSend">{{cn_en_list[767]}}</view>
操作步骤:
在安卓手机上点击输入框—弹出键盘—点击键盘上面的收起按钮收起键盘—触发其他板块的touch事件键盘会弹出
预期结果:
键盘没有弹出
实际结果:
弹出键盘
bug描述:
触发touch事件会导致键盘弹出(touch事件和输入框没有任何关联)
开发环境信息
类别 | 信息 |
---|---|
PC开发环境操作系统 | Windows |
PC开发环境版本号 | 1 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.29 |
手机系统 | Android |
手机系统版本号 | Android 15 |
手机厂商 | 小米 |
手机机型 | 小米15 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
更多关于uni-app 安卓手动收起键盘后 触发touch事件会导致键盘弹出的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我尝试重新创建一个默认模板的基础项目,并在首页添加了上述的两行代码,也可以复现出来我上面提到的bug,示例代码压缩包也上传了,希望尽快回复
更多关于uni-app 安卓手动收起键盘后 触发touch事件会导致键盘弹出的实战教程也可以访问 https://www.itying.com/category-93-b0.html
操作步骤在附件里面有
1111
在uni-app开发中,确实有时会遇到在安卓设备上手动收起键盘后,触发touch事件导致键盘再次弹出的问题。这通常是由于事件处理不当或者组件状态管理不精确引起的。为了解决这个问题,我们可以通过一些编程技巧来避免在键盘收起后立即触发touch事件。以下是一个可能的解决方案,通过监听键盘的显示和隐藏状态,来暂时禁用或延迟处理touch事件。
首先,我们需要监听键盘的显示和隐藏状态。uni-app提供了onKeyboardShow
和onKeyboardHide
事件来实现这一功能。
// 在页面的onLoad或mounted生命周期中注册事件监听
export default {
onLoad() {
// 注册键盘显示事件
uni.onKeyboardShow((res) => {
this.isKeyboardVisible = true;
});
// 注册键盘隐藏事件
uni.onKeyboardHide((res) => {
this.isKeyboardVisible = false;
// 设置一个短暂的延时,防止立即触发touch事件
this.touchEventDelay = true;
setTimeout(() => {
this.touchEventDelay = false;
}, 500); // 延时时间可以根据实际情况调整
});
},
onUnload() {
// 页面卸载时取消事件监听
uni.offKeyboardShow();
uni.offKeyboardHide();
},
data() {
return {
isKeyboardVisible: false,
touchEventDelay: false,
};
},
methods: {
handleTouch(event) {
// 检查是否处于键盘隐藏后的延时期内
if (this.touchEventDelay) {
return;
}
// 正常处理touch事件
console.log('Touch event triggered:', event);
// 其他逻辑...
},
},
};
在模板中,确保你的touch事件处理器正确绑定:
<template>
<view @touchstart="handleTouch">
<!-- 你的页面内容 -->
</view>
</template>
通过上述代码,我们监听键盘的显示和隐藏状态,并在键盘隐藏后设置一个短暂的延时。在这个延时期间,我们忽略所有的touch事件,从而避免键盘再次被误触发。这种方法虽然简单,但可以有效地解决问题,尤其是在处理复杂的交互逻辑时。
请注意,延时时间(这里是500毫秒)可能需要根据具体的应用场景进行调整,以达到最佳的用户体验。同时,确保在页面卸载时取消事件监听,以避免内存泄漏。