uni-app cli nvue userInteractionEnabled 在安卓上失效

uni-app cli nvue userInteractionEnabled 在安卓上失效

开发环境 版本号 项目创建方式
PC开发环境 Windows CLI
手机系统 Android
手机系统版本号 Android 8.0
手机厂商 模拟器
手机机型 vivo
页面类型 nvue
vue版本 vue3
打包方式 云端
CLI版本号 3.0.0-alpha-3040520220408002

示例代码:

<view @click="a=50">  
    <view @click="a=10"  :userInteractionEnabledn="false" >  
   </view>  
</view>  

操作步骤:

  • 如上述代码,定义变量a

预期结果:

  • a=50

实际结果:

  • a=10

bug描述:

安卓上实测nvue中view上使用:userInteractionEnabledn = "false" 事件不会向下传递。但在ios上是可以的。因此在安卓上是有bug的。

13 回复

你好 ,:userInteractionEnabled属性只在ios有效 , Android无效。

这就有点坑了呀。因为这一个问题布局就会非常的麻烦哈。哎。官方能解决下吗。ios有用。可以跨端,但你这个安卓又无法向下传递事件。关键是它会阻下往下传递。这做跨端非常不好搞呀。

回复 tmui: Android不会拦截事件,ios是通过uiview的userInteractionEnabled配置是否响应事件的开关,考虑disabled来控制事件吧 。

回复 DCloud_Android_THB: 看我的示例。确实在安卓下被拦截了呀。它不会往下传递。

你答对了,本来就无效;

根据我的示例,Android是不会拦截掉事件的。
<template>
<view>
<view class=“A” @click=“handleA” :userInteractionEnabled=“false”>
<view class=“B” @click=“handleB”></view>
</view>
</view>
</template>

<script> export default { data() { return { } }, methods: { handleA(){ console.log("AAA"); }, handleB(){ console.log("BBBB"); } } } </script> <style> .A { width: 700rpx; height: 600rpx; background-color: yellow; display: flex; justify-content: center; align-items: center; } .B { width: 200rpx; height: 200rpx; background-color: chocolate; } </style>

麻烦你看下,我下一条回复的测试动图。谢谢你的耐心。也附带了你的示例。 测试环境:cli nvue 3.0.0-alpha-3040620220415002 vite2.8.5 雷电模拟器安卓7.1.2 模拟机型华为

从动画上可以看出:我点了绿色,结果是50,并不是我想要的20,同时我也测试了底下红色的函数打印logo,也证明点击绿色,并不会打印出日志。所我不管怎么测试,证据都是表明事件被在绿色上发现,不会传递到下方的红色上去。

回复 tmui: 我使用你的代码测试 ,事件也没有拦截,你留一下qq,我详细给你看看吧。

回复 DCloud_Android_THB: 我已经私信你,另外还有一个scroll-view的问题。我不知道是不是不兼容模拟器安卓的问题。

感谢你们的回复。我弄了个gif图片给你看下。 <view @click=“testdata=20” style=“width:200px;height:160px;background:red” :userInteractionEnabled=“false”>
<view @click=“testdata=50” style=“width:200px;height:120px;background:green”></view>
</view>

uni-app 中使用 nvue 开发时,userInteractionEnabled 属性在 Android 平台上失效可能是由于以下原因之一:

1. 平台差异

  • userInteractionEnabled 是 iOS 平台特有的属性,用于控制视图是否响应用户交互。在 Android 平台上,这个属性可能不被支持或表现不一致。
  • 在 Android 上,通常使用 enabledclickable 属性来控制视图的交互性。

2. 替代方案

  • 如果你需要在 Android 上实现类似的功能,可以尝试使用 enabledclickable 属性。

  • 例如,在 nvue 中,你可以通过设置 enabled 属性来控制视图是否响应用户交互:

    <view :enabled="isEnabled" @click="handleClick">
      <!-- 内容 -->
    </view>

    script 部分:

    export default {
      data() {
        return {
          isEnabled: true
        };
      },
      methods: {
        handleClick() {
          if (this.isEnabled) {
            // 处理点击事件
          }
        }
      }
    };

3. 检查 nvue 版本

  • 确保你使用的 uni-appnvue 版本是最新的,因为某些问题可能在新版本中已经修复。

4. 平台特定代码

  • 如果你需要为 iOS 和 Android 分别处理交互性,可以使用条件编译:

    <view :userInteractionEnabled="isEnabled" v-if="platform === 'ios'">
      <!-- iOS 内容 -->
    </view>
    <view :enabled="isEnabled" v-else>
      <!-- Android 内容 -->
    </view>

    script 部分:

    export default {
      data() {
        return {
          isEnabled: true,
          platform: uni.getSystemInfoSync().platform
        };
      }
    };
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!