使用url参数打开传单标记现在使用了markercluster

时间:2015-03-12 08:04:09

标签: javascript leaflet mapbox markerclusterer

我在http://atlantaartmap.com有一个传单应用程序。它使用的javascript是http://atlantaartmap.com/lazy_art.js

在第16行,我获取了一个url参数,可用于打开特定部分的地图。在创建标记时,第71行有一段代码可以检查最近创建的标记是否具有URL中引用的ID。

此代码曾经有效,但我最近在网站上添加了标记群集,而不再使用。它仍然平移并缩放到标记,但弹出窗口无法打开。这是一个例子。

http://atlantaartmap.com/index.html?piece=40

if (marker.feature.properties.pieceID == pieceID) {
    map.setView(marker.getLatLng(), newZoom());
    marker.openPopup();
}

我不知道为什么,但map.setView()有效,而marker.openPopup()没有。

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

我的猜测(无法测试)是您在标记上调用openPopup时地图仍在缩放。那时标记尚未添加到地图中,因为您的群集因此弹出窗口不会显示。您可以尝试等待,直到setView方法已完成,方法是收听zoomend事件,然后打开弹出窗口:

if (marker.feature.properties.pieceID == pieceID) {
    map.setView(marker.getLatLng(), newZoom()).once('zoomend', function () {
        marker.openPopup();
    });
}

如果这不起作用,您可以尝试使用setTimeout稍微延迟:

if (marker.feature.properties.pieceID == pieceID) {
    map.setView(marker.getLatLng(), newZoom()).once('zoomend', function () {
        setTimeout(function () {
            marker.openPopup();
        }, 500); // Uses millisecs, you might need to fiddle around with it
    });
}

另一种选择可能是等待标记的add事件:

if (marker.feature.properties.pieceID == pieceID) {
    marker.once('add', function () {
        marker.openPopup();
    });
    map.setView(marker.getLatLng(), newZoom());
}

希望有所帮助,因为由于您案件的复杂性,我无法对此进行测试,所以我不确定。祝你好运!