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

4 回复

我尝试重新创建一个默认模板的基础项目,并在首页添加了上述的两行代码,也可以复现出来我上面提到的bug,示例代码压缩包也上传了,希望尽快回复

更多关于uni-app 安卓手动收起键盘后 触发touch事件会导致键盘弹出的实战教程也可以访问 https://www.itying.com/category-93-b0.html


操作步骤在附件里面有

在uni-app开发中,确实有时会遇到在安卓设备上手动收起键盘后,触发touch事件导致键盘再次弹出的问题。这通常是由于事件处理不当或者组件状态管理不精确引起的。为了解决这个问题,我们可以通过一些编程技巧来避免在键盘收起后立即触发touch事件。以下是一个可能的解决方案,通过监听键盘的显示和隐藏状态,来暂时禁用或延迟处理touch事件。

首先,我们需要监听键盘的显示和隐藏状态。uni-app提供了onKeyboardShowonKeyboardHide事件来实现这一功能。

// 在页面的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毫秒)可能需要根据具体的应用场景进行调整,以达到最佳的用户体验。同时,确保在页面卸载时取消事件监听,以避免内存泄漏。

回到顶部