在传单中隐藏工具提示以获得缩放范围

Bap*_*ste 5 javascript leaflet

我可能在某些区域有很多标记,但是如果同一区域中有 5 个标记,则显示工具提示并不是很有用,例如此屏幕:

在此处输入图片说明

是否可以hide从缩放范围获得那些工具提示?例如,隐藏级别 0 到 5 的工具提示。

也许使用getZoom()带有缩放事件的方法,例如:

if the user zoom {
    if (getZoom() < 5) {
      hide all tooltip
    }
}
Run Code Online (Sandbox Code Playgroud)

或者更复杂但更好的东西,如果同一区域有太多标记,它可以隐藏它?

Lor*_*ell 7

接受的答案对我不起作用(我使用的是 Leaflet 1.2.0),但这是一个使用permanentLeaflet 工具提示选项的修改版本:

var lastZoom;
mymap.on('zoomend', function() {
    var zoom = mymap.getZoom();
    if (zoom < tooltipThreshold && (!lastZoom || lastZoom >= tooltipThreshold)) {
        mymap.eachLayer(function(l) {
            if (l.getTooltip()) {
                var tooltip = l.getTooltip();
                l.unbindTooltip().bindTooltip(tooltip, {
                    permanent: false
                })
            }
        })
    } else if (zoom >= tooltipThreshold && (!lastZoom || lastZoom < tooltipThreshold)) {
        mymap.eachLayer(function(l) {
            if (l.getTooltip()) {
                var tooltip = l.getTooltip();
                l.unbindTooltip().bindTooltip(tooltip, {
                    permanent: true
                })
            }
        });
    }
    lastZoom = zoom;
})
Run Code Online (Sandbox Code Playgroud)

使用此方法,您还必须permanent在最初将工具提示绑定到标记时设置该选项:

(mymap.getZoom() >= tooltipThreshold
    ? marker.bindTooltip(tooltipText, {permanent:true})
    : marker.bindTooltip(tooltipText, {permanent:false} )
);
Run Code Online (Sandbox Code Playgroud)

在一个单独但相关的说明中,已接受答案中的链接是关于 Leaflet Label 插件的 stackoverflow 问题,该插件已作为工具提示并入 Leaflet 核心,现在已过时,所以如果您在那里浪费时间有最新版本的传单。


use*_*511 5

要根据缩放范围隐藏工具提示,请参阅引用此 JS bin 的传单问题对话。代码重复如下:

var lastZoom;
map.on('zoomend', function() {
  var zoom = map.getZoom();
  if (zoom < 15 && (!lastZoom || lastZoom >= 15)) {
    map.eachLayer(function(l) {
      if (l.getTooltip) {
        var toolTip = l.getTooltip();
        if (toolTip) {
          this.map.closeTooltip(toolTip);
        }
      }
    });
  } else if (zoom >= 15 && (!lastZoom || lastZoom < 15)) {
    map.eachLayer(function(l) {
      if (l.getTooltip) {
        var toolTip = l.getTooltip();
        if (toolTip) {
          this.map.addLayer(toolTip);
        }
      }
    });
  }
  lastZoom = zoom;
})
Run Code Online (Sandbox Code Playgroud)

编辑:另外,请参阅此 StackOverflow 问题