uniapp解决点击穿透问题总结

摘要:

今天uniapp写详情页的时候遇到点击跳转详情与点击跳转导航既然穿透出去了,点击导航跳转详情页了!

bash 复制代码
<view class="card_item" v-for="item in status" :key="item.value">
    <view @tap="toDetails(item)">
        <view class="d-f">
            <text class="f32 fb mb10">XXX</text>
            <uv-icon @tap="handlePhoneClick($event)" size="20" class="ml30 mr30" name="/static/phone_icon.png"></uv-icon>
            <uv-icon @tap="handleNavigationClick($event)" size="20" name="/static/nav_icon.png"></uv-icon>
        </view>
     </view> 
</view>
typescript 复制代码
<script setup>
  import { ref } from "vue";
  const toDetails = (t) => {
    const now = Date.now();
    if (now - lastActionTime < 500) { // 防止快速连续点击
      return;
    }
    lastActionTime = now;
    
    uni.navigateTo({
      url: `/details/index1?id=${t.type}`,
    });
  };

  const toPhoneCall = () => {
    const now = Date.now();
    if (now - lastActionTime < 500) { // 防止快速连续点击
      return;
    }
    lastActionTime = now;
    uni.makePhoneCall({
      phoneNumber: '123456'
    });
  }

  const toNavigation = (t) => {
    const now = Date.now();
    if (now - lastActionTime < 500) { // 防止快速连续点击
      return;
    }
    lastActionTime = now;
    
    uni.navigateTo({
      url: `/navigation/index?id=123`,
    });
  };

  const handlePhoneClick = (event) => {
    event?.preventDefault?.();
    event?.stopPropagation?.();
    toPhoneCall();
  };

  const handleNavigationClick = (event) => {
    event?.preventDefault?.();
    event?.stopPropagation?.();
    toNavigation();
  };
</script>

一开始使用@click,穿透是绝对存在的!

后来添加@click.stop阻止事件冒泡,还是不行!

手动阻止冒泡还是不行!

bash 复制代码
const toNavigation = (event) => {
  event.stopPropagation(); // 阻止事件冒泡
  uni.navigateTo({
    url: `/navigation/index?id=123`,
  });
};

@click.prevent.stop还是不行!

CSS 防止事件穿透还是不行!

css 复制代码
.card_info {
  pointer-events: none; // 禁用整个区域的指针事件
  
  .d-f { // 只对需要交互的元素启用指针事件
    pointer-events: auto;
  }
}

.d-f {
  pointer-events: auto; // 确保图标可以响应点击
}

最终使用 @tap 替代 @click - 在移动端应用中,@tap 通常是更好的选择

添加防重击措施 - 通过 lastActionTime 防止快速连续点击

安全的事件处理 - 使用 event?.preventDefault?.() 安全链式调用

移除了可能导致冲突的 stop 修饰符

相关推荐
2301_32241428045 小时前
springboot学生课堂出勤统计系统15835-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·mysql·随机森林·微信小程序·uni-app·微信开发者工具·推荐算法
2501_915921432 天前
iOS应用从开发到上架App Store的完整步骤详解
android·ios·小程序·https·uni-app·iphone·webview
小蒜学长4 天前
基于SpringBoot+uni-app的闪洁家政系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·uni-app·家政服务
anyup_前端梦工厂4 天前
uni-app 模板 Starter 一键清理 Skill 发布
前端·人工智能·uni-app
anyup_前端梦工厂4 天前
将uni-app工程迁移uni-app x,AI 能帮我们做什么?
前端·人工智能·uni-app
蒿豪郝灬号4 天前
UniApp接入鸿蒙版阿里百川
华为·uni-app·harmonyos
2501_915921435 天前
详细教程:使用Perfdog工具测量iOS应用的功耗性能与优化方法
android·macos·ios·小程序·uni-app·cocoa·iphone
梦曦i5 天前
uni-app、uni-app x 与 Flutter 深度对比:2026年跨平台开发框架选型指南
flutter·uni-app·uni-app x
普马萨特6 天前
uni-app x 定位踩坑实录:H5/小程序/App 统一经纬度与逆地理编码
uni-app
Geek_Vison7 天前
保险APP已经用了Flutter,还能接入小程序吗?
flutter·小程序·uni-app·mpaas·小程序容器