Javascript (多边形形状)图层顶部带有弹出窗口的Mapbox标记,带有弹出窗口的图层显示2个弹出窗口
对于当前项目,我使用mapbox显示区域,并在这些区域的顶部显示标记。两者都应有一个带有简短说明的弹出窗口 根据此处的文档,该标记为HTML+CSS,并附有一个pop: 这一切都很好,直到一个标记位于另一层的顶部。单击标记时,将显示标记弹出窗口和图层/多边形弹出窗口 预期结果:仅显示标记的弹出窗口,因为这是单击的顶部元素Javascript (多边形形状)图层顶部带有弹出窗口的Mapbox标记,带有弹出窗口的图层显示2个弹出窗口,javascript,mapbox,mapbox-gl-js,Javascript,Mapbox,Mapbox Gl Js,对于当前项目,我使用mapbox显示区域,并在这些区域的顶部显示标记。两者都应有一个带有简短说明的弹出窗口 根据此处的文档,该标记为HTML+CSS,并附有一个pop: 这一切都很好,直到一个标记位于另一层的顶部。单击标记时,将显示标记弹出窗口和图层/多边形弹出窗口 预期结果:仅显示标记的弹出窗口,因为这是单击的顶部元素 在('click')上没有标记的 如果每次单击地图时都使用new mapboxgl.Popup(),那么是的,您将得到一个“new mapboxgl Popup”: 您需要重用
在('click')上没有标记的
如果每次单击地图时都使用new mapboxgl.Popup()
,那么是的,您将得到一个“new mapboxgl Popup”:
您需要重用现有的弹出窗口,如下所示:
var popup = new mapboxgl.Popup();
map.on('click', 'states-layer', function (e) {
popup.setLngLat(e.lngLat)
.setHTML(e.features[0].properties.name)
.addTo(map);
});
最后,我使用了以下解决方法:
使用自定义HTML创建标记,并给它一个类
现在,在收听区域弹出窗口的单击事件时,检查目标类列表是否包含返回的标记类,并让mapbox在内部处理标记弹出窗口
map.on('click','states layer',函数(e){
if(event.originalEvent.target.classList.contains(MARKER_CLASS))返回;
}
如果有人遇到同样的问题,希望这能有所帮助。好吧,通过使用setPopup
标记的弹出窗口是由bij mapbox内部处理的。标记没有单击事件可供侦听和处理,就像您上面提到的那样。
map.on('click', 'states-layer', function (e) {
new mapboxgl.Popup()
.setLngLat(e.lngLat)
.setHTML(e.features[0].properties.name)
.addTo(map);
});
var popup = new mapboxgl.Popup();
map.on('click', 'states-layer', function (e) {
popup.setLngLat(e.lngLat)
.setHTML(e.features[0].properties.name)
.addTo(map);
});