uni-app中map组件@tap事件会触发两次
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时间无法获取经纬度都多长时间了,也没见你们改啊
HBuilderX 3.6.0 已修复
为什么H5map的@markertap也会执行两次
回复 DCloud_UNI_WZF: 我有个map @markertap会触发两次提问麻烦可以看一下
回复 代码阿尔法: 感谢反馈,我排查下
解决了嘛,我也遇到了,h5没问题,手机浏览器就出现这个情况了
好几个月了还没解决。
在 uni-app
中使用 map
组件时,@tap
事件可能会触发两次的问题,通常是由于 map
组件的默认行为和 uni-app
的事件处理机制导致的。以下是一些可能的原因和解决方案:
1. @tap
事件与 [@click](/user/click)
事件的区别
@tap
是uni-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);
// 你的逻辑代码
}