uni-app中map组件@tap事件会触发两次

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app中map组件@tap事件会触发两次

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

操作步骤:

<map style="height: 300rpx;width: 100%;" enable-zoom="true" scale="12" :latitude="latitude" :longitude="longitude" :markers="covers"  [@tap](/user/tap)="siteMap"></map>

预期结果:

<map style="height: 300rpx;width: 100%;" enable-zoom="true" scale="12" :latitude="latitude" :longitude="longitude" :markers="covers"  [@tap](/user/tap)="siteMap"></map>

实际结果:

<map style="height: 300rpx;width: 100%;" enable-zoom="true" scale="12" :latitude="latitude" :longitude="longitude" :markers="covers"  [@tap](/user/tap)="siteMap"></map>

bug描述:

地图定位上有markers时 使用@tap 拉起导航时会触发两次,单独使用@markertap / @labeltap 则不会


12 回复

bug 已确认,感谢您的反馈!


你们这光听不改啊,h5页面中map组件的自定义气泡框和@tap时间无法获取经纬度都多长时间了,也没见你们改啊

回复 1***@qq.com: tap返回经纬度有平台兼容性,h5端并不支持

HBuilderX 3.6.0 已修复

为什么H5map的@markertap也会执行两次

回复 代码阿尔法: 高德地图吗?

回复 DCloud_UNI_WZF: 是的

回复 DCloud_UNI_WZF: 我有个map @markertap会触发两次提问麻烦可以看一下

回复 代码阿尔法: 感谢反馈,我排查下

解决了嘛,我也遇到了,h5没问题,手机浏览器就出现这个情况了

好几个月了还没解决。

uni-app 中使用 map 组件时,@tap 事件可能会触发两次的问题,通常是由于 map 组件的默认行为和 uni-app 的事件处理机制导致的。以下是一些可能的原因和解决方案:

1. @tap 事件与 [@click](/user/click) 事件的区别

  • @tapuni-app 中的事件,用于处理触摸事件。
  • [@click](/user/click) 是标准的点击事件。
  • 在某些情况下,@tap 事件可能会被触发两次,尤其是在 map 组件中。

解决方案:尝试使用 [@click](/user/click) 事件代替 @tap 事件,看看是否能解决问题。

<map [@click](/user/click)="handleMapClick"></map>

2. 事件冒泡

  • map 组件内部可能已经处理了点击事件,并且事件冒泡到了父组件,导致 @tap 事件被触发两次。

解决方案:在事件处理函数中使用 event.stopPropagation() 来阻止事件冒泡。

handleMapClick(event) {
  event.stopPropagation();
  // 你的逻辑代码
}

3. map 组件的默认行为

  • map 组件可能会有一些默认的点击行为,例如点击地图上的标记点、缩放等,这些行为可能会触发 @tap 事件。

解决方案:检查 map 组件的配置,确保没有不必要的默认行为。

4. uni-app 的版本问题

  • 某些 uni-app 版本可能存在 map 组件事件处理的 bug,导致 @tap 事件被触发两次。

解决方案:尝试更新 uni-app 到最新版本,或者查看官方文档和社区是否有相关的解决方案。

5. 使用 [@markertap](/user/markertap) 事件

  • 如果你是在点击地图上的标记点时遇到问题,可以使用 [@markertap](/user/markertap) 事件来处理标记点的点击事件,而不是使用 @tap 事件。
<map [@markertap](/user/markertap)="handleMarkerTap"></map>

6. 调试和日志

  • 在事件处理函数中添加日志,查看事件触发的次数和时机,帮助定位问题。
handleMapClick(event) {
  console.log('Map clicked', event);
  // 你的逻辑代码
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!