我正在努力创建一个悬停效果,我认为应该非常简单,并且也是使用 Mapbox gl js 的开发人员的常见用例。
我有一张有 2 层的地图。第 1 层是符号图层,使用图标来标记地图上的点。第 2 层是符号层,在第 1 层的图标顶部显示分数(文本)。
我使用过滤alahttps://www.mapbox.com/mapbox-gl-js/example/hover-styles/来监听鼠标事件并在适当的时候隐藏和显示第2层。
在我的代码中,我正在监听第 1 层上的mouseenter事件mouseleave。我的问题是,当第 2 层通过过滤器的更改显示时,它会导致第 1 层触发 mouseleave 事件,因为第 2 层位于第 1 层之上。鼠标在第 2 层上移动mouseenter,mouseleave当鼠标事件穿过第 2 层的文本行向下到达第 1 层时,第 1 层的事件会不断触发。这会导致第 2 层在显示和隐藏时闪烁。
我尝试过的事情:
我尝试使用“之前”参数https://www.mapbox.com/mapbox-gl-js/example/geojson-layer-in-stack/
我尝试创建一个位于第 1 层和第 2 层之上的新层(第 3 层),其中包含与第 1 层大小相同的透明图标,并侦听第 3 层上的鼠标事件。
我尝试通过 setStyle (而不是使用过滤器)切换第 2 层的可见性。
我尝试将第 2 层内容作为第 1 层的文本字段,并寻找一种在悬停时显示地图框图层的文本字段的方法(无法弄清楚......这可能吗?)
当通过过滤或样式更改修改图层时,Mapbox gl js 似乎会重新绘制图层顺序。重画似乎总是将受影响的图层放在顶部!?
任何指示或建议将不胜感激。相当难住!
谢谢阅读!