我们的设置
我们有一个L.map ,其中包含从跨越一个月的动态事件数组加载的L.markers的各个层。许多列出的场地在任何给定时期都会举办许多活动,因此我们最终会使用我们从 CDN 运行的OMS-Leaflet 插件 (0.2.6)很好地共享许多标记共享位置
根据星期几或事件是否已确认/到期,每个标记被放入几个标记层之一,例如,这是一个周末:
markerWeekEnd = L.marker([lat, lon], { %options% });
markerWeekEnd.addTo(map);
weekend.addLayer(markerWeekEnd);
oms.addMarker(markerWeekEnd);
我花了一段时间才弄清楚如何正确堆叠标记,以便它们以特定顺序显示(1.即将到来的标记,2 . 其他未来的日期标记和3.任何过期的标记,如果适用)使用zIndexOffset作为带来前( )方法不支持 L.markers。
</p>
问题
我们根据需要加载和堆叠所有东西,并且在我们unspiderfy / spiderfy之前一切正常。当标记被重新蜘蛛化时,最终位于顶部的标记不是最初显示的标记。
我查看了所有 OMS 问题,而不仅仅是OMS-Leaflet (即Google Maps API v3 的 OMS 版本),并发现了一些似乎暗示类似问题的已关闭问题:
OMS 应该记住标记 #76 z-Indices reset #117 的原始 zIndex (之前的修复关闭了这个)
现在据我所知,这些相关的修复似乎已应用于OverlappingMarkerSpiderfier/1.0.2/oms.js(我想现在也是 1.0.3),但可能不是OverlappingMarkerSpiderfier -Leaflet/0.2.6/oms。 js版本。
无论如何,我们随后为解决上述问题所做的努力似乎确实在一定程度上解决了 zIndex,但并未克服与 OMS spiderfy 相关的堆叠问题。
</p>
我们尝试了什么
决定调整我的标记选项以保留原始 zIndexOffset设置L.marker([lat, lon], {... zIndexOffset: mIndex, mDay: mDay})
,并查看使用保留值重置 zIndex 是否可以解决我的堆叠问题
// for both spiderfy & unspiderfy
oms.addListener('spiderfy', function(markers) {
markers.forEach(function(marker) { zIndexCheck(marker); });
}
function zIndexCheck(marker){
L.setOptions( marker, { zIndex: mIndex, zIndexOffset: mIndex });
}
可悲的是,尽管它似乎保留了unspiderfy / spiderfy之前和之后的标记的 zIndex 值,但最终保留在顶部的标记不是之前的那个,也不是提供的 zIndex 计数最高的那个(addListener for spiderfy) .
我在以下jsfiddle上重新创建了我们网站功能的精简版本,控制台记录了 spiderfy前后初始标记的 zIndexes:
Marker Title: 'London Socials #1 (1/2)' startTime:ENDED: 1st Feb zIndex:-10
Marker Title: 'London Socials #2 (14/2)' startTime:Fri 14th Feb zIndex:5054 (Active)
Marker Title: 'London Socials #3 (28/2)' startTime:Fri 28th Feb zIndex:2026
#2
最初是活动项目
蜘蛛飞
[London Socials #1 (1/2)] index:990
[London Socials #2 (14/2)] index:5027
[London Socials #3 (28/2)] index:5013
蜘蛛侠
[London Socials #1 (1/2)] index:990
[London Socials #2 (14/2)] index:5027
[London Socials #3 (28/2)] index:5013 (Active)
#3
现在是spiderfy/unspiderfy 之后的活动项目(请参阅下面的最终元素)
最终 标记元素
<div class="awesome-marker-icon-blue awesome-marker leaflet-zoom-animated leaflet-interactive"
title="London Socials #2 (14/2)" tabindex="0" style="margin-left: -17px; margin-top: -42px; width: 35px; height: 45px; transform: translate3d(83px, 218px, 0px);
z-index: 5218;"><i class=" fa fa-moon icon-white"></i></div>
<div class="awesome-marker-icon-blue awesome-marker leaflet-zoom-animated leaflet-interactive"
title="London Socials #3 (28/2)" tabindex="0" style="margin-left: -17px; margin-top: -42px; width: 35px; height: 45px; transform: translate3d(83px, 218px, 0px);
z-index: 5218;"><i class=" fa fa-moon icon-white"></i></div>
据我所知,无法弄清楚具有先前较低 zIndex 的项目 3(与项目 2 相比)如何以新的z-index: 5218结束,恰好是相同的与第 2 项一样的新 z-index 值!
我在 gitHub 上将此作为 bug 发布,但现在我不太确定这是 OMS-Leaflet 的 bug。所以我也在这里发帖。这是显示问题的小提琴:
https://jsfiddle.net/magicmb/17j2z4gy/
环境特定版本:leaflet.js (1.6.0)、Leaflet.awesome-markers (2.0.2)、OverlappingMarkerSpiderfier-Leaflet (0.2.6)