Leaflet JS Map:MouseOver 上的弹出窗口在不正确的位置打开

Posted

技术标签:

【中文标题】Leaflet JS Map:MouseOver 上的弹出窗口在不正确的位置打开【英文标题】:Leaflet JS Map: Popup on MouseOver opens in incorrect location 【发布时间】:2022-01-18 03:12:10 【问题描述】:

我正在使用 Leaflet jS 制作地图,除了需要在地图上的国家/地区上悬停时弹出国家/地区名称外,它运行良好。

关于使用以下代码

layer.on(
  mouseover: function over(e) 
    layer.bindPopup(L.popup().setContent(feature.properties.name));
    layer.openPopup();
  ,
  mouseout: function out(e) 
    layer.closePopup();
  ,
);

Country 名称确实会弹出,但它在 int 的位置稍有偏差。例如,当鼠标悬停在墨西哥西部太平洋打开的弹出窗口上时,美国。所有弹出窗口都与发生悬停的位置稍有偏差。

您知道如何将弹出窗口设置为始终直接在国家/地区弹出窗口吗?

提前感谢您对此提供的任何帮助。

【问题讨论】:

【参考方案1】:

虽然没有明确记录,但当您在 ​​Leaflet 路径(矢量)层上 bindPopup 时,它会将弹出提示定位在层“中心”上,即与其边界相比的中间位置。

在美国的例子中,图层可能是一个包含夏威夷的多面体。这会将图层边界向西南方向移动很远,导致图层“中心”远离墨西哥。

您可以为您的用例计算一个更合理的“中心”,并在地图上明确设置弹出位置,而不是将其绑定到图层(中心)。

但是,在某些情况下(通常对于小层),您可能会遇到经典的鼠标悬停弹出窗口闪烁的可用性问题:如果弹出窗口在鼠标下打开,则会触发 mouseout 事件,从而关闭您的弹出窗口。然后触发一个新的 mouseover 事件,这会打开一个新的弹出窗口,等等。

通常的解决方法是改用 Leaflet Tooltip,您不需要自己实现 mouseover/mouseout 的东西。您可以使用sticky option 将其定位在鼠标光标旁边,以摆脱任何中心计算。

如果为 true,则工具提示将跟随鼠标而不是固定在特征中心。

【讨论】:

谢谢@ghybs,到目前为止我还没有使用过标记。标记需要工具提示是正确的。我试过 var marker = L.marker(location); marker.bindTooltip("我的工具提示文本").openTooltip();不采取任何行动。标记上也需要事件吗?谢谢 我不确定我是否理解您的评论?工具提示可用于任何类型的传单图层,而不仅仅是标记。如果您需要帮助,请随时提出新问题。 谢谢@ghybs,这是我的误解。我认为它仅在标记上可用。感谢您的帮助

以上是关于Leaflet JS Map:MouseOver 上的弹出窗口在不正确的位置打开的主要内容,如果未能解决你的问题,请参考以下文章

单击地图时添加新标记(OpenStreetMap,Leaflet JS)

Leaflet.js - 在地图视图上拟合 geoJSON 坐标

leaflet使用turfjs插件,基于格点数据绘制等值线效果

如何在不渲染地图的情况下获取用户位置数据 - Leaflet

在 Knockout 中调整 Leaflet JS 地图的大小

leaflet 绘制 点 线 面 圆 椭圆 线缓冲区