参考:https://www.cnblogs.com/zongsir/p/8184537.html
这个问题搞了2小时,网上方法很多但是都不太好用。
终于找到个能用的。
目标功能: 实现地图上显示若干坐标点,鼠标滑过显示站点名称label标签;移开label标签消失;点击弹出窗口详情。
第一:移除label的时候marker还要保留
第二:点击marker要弹出详情框
法一:(采用,亲测有效)
这部分是鼠标滑过时显隐藏label标签的部分代码,但是label 找不到remove或者hide的方法,所以用隐藏的办法。下边是解决办法:
1,创建的时候 将label设置为隐藏
2,通过百度地图监听事件 ,mouseover或onmouseover 触发显示
3,通过mouseover 或onmouseover 触发隐藏
var label = new BMapGL.Label(stationName, { offset: new BMapGL.Size(10, -25) });
label.setStyle({
display:"none",
color: "red",
fontSize: "12px",
height: "20px",
lineHeight: "20px",
fontFamily: "微软雅黑"
});
marker.setLabel(label);
marker.addEventListener("mouseover", function(e) {
var label = this.getLabel()
label.setStyle({ display: "block" });
});
marker.addEventListener("mouseout", function(e) {
var label = this.getLabel()
label.setStyle({ display: "none" });
});
map.addOverlay(marker); //将标记添加到地图中
方法二:
清除全部除marker以外的覆盖物,将marker设置为禁止删除,再执行清除覆盖物方法(但是这种方法也对弹出详情框有影响,所以我采用了第一种方法)
//先将marker设置为禁止删除,再清除所有覆盖物
marker.disableMassClear();//禁止被删除
map.clearOverlays() //清除所有覆盖物
清除覆盖物有两个方法:
map.removeOverlay() 或者 map.clearOverlays()
map.clearOverlays() 方法 :一次移除所有的覆盖物
map.removeOverlay() 方法 : 一次移除一个指定覆盖物。
例:
//清除指定覆盖物
var allOverlay = map.getOverlays();
for (var i = 0; i < allOverlay.length -1; i++){
if(allOverlay[i].getLabel().content == "aa"){
map.removeOverlay(allOverlay[i]);
return false;
}
}
保留某种覆盖物
第一步:在添加覆盖的时候对不需要进行移除操作的覆盖设置disableMassClear();官网文档解释如下
我这里不需要对marker进行移除操作,所以设置如下:
marker.disableMassClear();
第二步:清除所要清除的覆盖物,这里需要清除所有的Polyline而不清除marker,现在可以直接使用
map.clearOverlays();
这样就能很方便的清除所有Polyline而保留marker;
第三步:当后来需要对marker进行移除操作时,可以使用enableMassClear()方法来取消禁止清除;
但是需要对每个marker进行恢复操作,所以需要进行遍历:
但是需要对每个marker进行恢复操作,所以需要进行遍历:
var allOverlay = map.getOverlays();
for (var i = 0; i < allOverlay.length; i++) {
allOverlay[i].enableMassClear();
}
这样就恢复了所有覆盖物的可清除操作。
参考文章:https://www.jianshu.com/p/e6ab36f85b5b