这一次只适用于一个标记,但是我需要更多的标记:

marker.on('mouseover', function(e){
    marker.openPopup();
});


评论

如果您有两个问题,请打开两个线程,以便分别回答。

#1 楼

如果您需要显示标记的弹出窗口,则可以使用标记bindPopup方法。

,您便有了更多控制权,它将自动绑定到标记。下面的示例可以在用户将鼠标悬停在上面时显示弹出窗口,而在用户将鼠标悬停在弹出窗口时将其隐藏:

当您将鼠标悬停在弹出窗口本身上时,因此您可能需要在其中调整弹出锚点(请参见弹出窗口设置),以使弹出窗口距离标记本身更远,以免消失不易。

评论


悬停在弹出窗口时保持可见的解决方案-jsfiddle.net/sowelie/3JbNY

– rob-gordon
16年4月4日在14:49

#2 楼

如果您使用Leaflet 1.3.x,则工具提示绑定是内置方法。

http://leafletjs.com/reference-1.3.0.html#tooltip

var polyline = L.polyline([[StartLat, StartLong],[EndLat,EndLong]]).addTo(this.map);
    polyline.bindTooltip("tool tip is bound");


评论


太棒了完全避免了上述的“鼠标悬停” /“鼠标悬停”抖动。

–尼克K9
19年6月10日在20:10

bindTooltip()也可用于单个标记。

– S. Baggy
19年9月12日在6:19

#3 楼


这将有助于在鼠标悬停时显示弹出窗口


marker.on('mouseover', function(e) {
  //open popup;
  var popup = L.popup()
   .setLatLng(e.latlng) 
   .setContent('Popup')
   .openOn(map);
});


评论


谢谢!这段代码帮助我解决了与此问题无关的问题。

–阿巴菲
17年1月6日在2:01

#4 楼

这不是特定于Leaflet的问题,而是Javascript问题。

将标记存储在集合中,然后将所有标记都绑定到openPopup'mouseover'事件。

例如,使用数组:

var markers = getAllMarkers(); // up to you to implement, say it returns an Array<L.Marker>

for (var i = 0; i < markers.length; i++) {
    var currentMarker = markers[i];
    currentMarker.on('mouseover', currentMarker.openPopup.bind(currentMarker));
}


评论


在评论中而不是在答案中发表意见:我认为,悬停打开的弹出窗口在地图上的可用性值得怀疑,根据定义,光标在其中徘徊很多。您是否真的希望用户在标记之间进行寻路,以最终达到他们想要的标记,但是每当他们尝试将光标移向目标时,它们总是隐藏在弹出窗口之后?

– MattiSG
2012年8月23日在9:34



不幸的是,这不是我的选择。我存储的标记像带有Leaflet MarkerCluster的新L.MarkerClusterGroup:var markers = new L.MarkerClusterGroup();您为之编写的代码也可以吗?

–againstflow
2012年8月23日14:03



@againstflow Erm,那么您应该更改您的问题。您不仅要问悬停时打开标记,还问如何在L.MarkerCluster实例中对标记进行迭代……我的答案清楚地显示了如何在悬停时绑定弹出窗口集合。如果您想知道如何从集群中获取集合,那就别无所求了。

– MattiSG
2012年8月24日14:40

#5 楼

就拥有“可用于更多标记”的解决方案而言,这就是我对从GeoJSON加载的点数据的每一层所做的操作:

var layerPopup;
featureLayer.on('mouseover', function(e){
    var coordinates = e.layer.feature.geometry.coordinates;
    var swapped_coordinates = [coordinates[1], coordinates[0]];  //Swap Lat and Lng
    if (map) {
       layerPopup = L.popup()
           .setLatLng(swapped_coordinates)
           .setContent('Popup for feature #'+e.layer.feature.properties.id)
            .openOn(map);
    }
});
featureLayer.on('mouseout', function (e) {
    if (layerPopup && map) {
        map.closePopup(layerPopup);
        layerPopup = null;
    }
});


评论


只是好奇,FeatureLayer是什么类型的对象?看起来这是一个很好的解决方案。

–贝hr
15年8月25日在13:40