Mapbox GL JS:堆叠图层时在mouseenter和mouseleave上创建悬停效果时出现问题(z索引)
我正在努力创建一个悬停效果,我认为这应该是一个很好的发展方向,也是使用mapbox gl js的开发人员的常见用例 我有一张两层的地图。 图层1是一个符号图层,它使用图标在地图上标记点。 第2层是一个符号层,在第1层图标顶部显示分数(文本) 我使用过滤alaMapbox GL JS:堆叠图层时在mouseenter和mouseleave上创建悬停效果时出现问题(z索引),mapbox,mapbox-gl-js,Mapbox,Mapbox Gl Js,我正在努力创建一个悬停效果,我认为这应该是一个很好的发展方向,也是使用mapbox gl js的开发人员的常见用例 我有一张两层的地图。 图层1是一个符号图层,它使用图标在地图上标记点。 第2层是一个符号层,在第1层图标顶部显示分数(文本) 我使用过滤alahttps://www.mapbox.com/mapbox-gl-js/example/hover-styles/监听鼠标事件,并在适当时隐藏和显示第2层 在我的代码中,我正在监听第1层上的mouseenter和mouseleave事件。我
https://www.mapbox.com/mapbox-gl-js/example/hover-styles/
监听鼠标事件,并在适当时隐藏和显示第2层
在我的代码中,我正在监听第1层上的mouseenter
和mouseleave
事件。我的问题是,当第2层通过过滤器中的更改显示时,它会导致从第1层触发mouseleave事件,因为第2层位于第1层之上。当鼠标在第2层移动时,第1层的mouseenter
和mouseleave
事件会在鼠标事件穿过第2层的文本行到达第1层时持续激发。这会导致第2层在显示和隐藏时闪烁
我尝试过的事情:
- 我尝试使用'before'参数
https://www.mapbox.com/mapbox-gl-js/example/geojson-layer-in-stack/
- 我试图创建一个新层(第3层),它位于第1层和第2层的顶部,包含一个与第1层大小相同的透明图标,并在第3层上侦听鼠标事件
- 我尝试过通过setStyle(而不是使用过滤器)切换第2层的可见性
- 我已经尝试将第2层内容包含为第1层的文本字段,并寻找一种在地图框层的文本字段上悬停显示的方法(无法理解…这可能吗?)
谢谢你的阅读 mouseenter事件可能有问题,原因有几个,包括您注意到的一个 更可靠的方法是使用
mousemove
事件,然后直接调用queryRenderedFeatures()
。比如:
var lastFeatureId;
map.on("mousemove", function (e) {
var fs = queryRenderedFeatures(e.point, { layers: ['myiconlayer']});
if (fs.length > 0) {
f = fs[0];
if (f.id !== lastFeatureId) {
lastFeatureId = f.id;
// some visual effect now that the mouse is over a new layer.
}
}
});
Steve Bennett非常感谢您的回复!我已尝试按照您的建议使用mapbox的
map.queryRenderedFeatures()
函数。如果“符号”层以重叠方式堆叠,则堆栈中较低的符号层不会包含在从map.queryRenderedFeatures()
返回的数组中。我在“不包括由于文本或图标冲突而隐藏的符号功能”中找到了这句话。添加了“图标允许重叠”:true”和类似的属性,但没有任何效果。谢谢是的,你可能应该检查鼠标是否在文本或图标上,然后做同样的动作。@SteveBennett你能看一下吗。我需要帮助。