百度地图 保留marker的基础上,鼠标滑过显示label,鼠标移开label消失

参考: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
 
 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值