百度地图点击Marker同时触发Map的click事件解决方法

在页面上添加个百度地图,地图上添加了一个Marker,并且给Map和Marker都添加了click事件处理程序:

// 添加地图
var map = new BMap.Map("allmap");
map.centerAndZoom(new BMap.Point(120.128132,30.228835), 13);
map.addEventListener("click", function(){
  alert("map");
});
// 添加标注点
var marker = new BMap.Marker(new BMap.Point(120.140421,30.222657));
marker.addEventListener("click", function(){
   alert("marker");
});
map.addOverlay(marker);

测试发现了问题:点击Marker时,不仅触发了Marker的click事件处理程序,还同时触发了Map的click事件处理程序,怎么解决这个问题呢?

翻阅百度地图开放平台《Javascript API》,Map对象click事件参数为"{type, target, point, pixel, overlay}",利用overlay参数,我们只需在Map处理程序增加判断如果当前位置有覆盖物则不执行后续程序即可:

map.addEventListener("click", function(e){
  if(e.overlay){
    return; // 存在覆盖物退出
  }

  alert("map");
});


评论: 0 | 引用: 0 | 查看次数: 6540
发表评论
登录后再发表评论!