1

我对传单 openPopup 方法有疑问。

showMap = function(elements) {
    var jsonp = 'http://a.tiles.mapbox.com/v3/blahblahblah.jsonp';
    var m = new L.Map("my_map").setView(new L.LatLng(51.5, -0.09), 15);

    var geojsonLayer = new L.GeoJSON();

    var PlaceIcon = L.Icon.extend({
        iconSize: new L.Point(25, 41),
        shadowSize: new L.Point(40, 35),
        popupAnchor: new L.Point(0, -30)
    });

    var icon = new PlaceIcon(__HOME__ + '/images/leaflet/marker.png');
    var marker;


    for (var i = 0; i < elements.length; i++) {
        var address = $("<div/>").html(elements[i].address).text();
        var latlng = new L.LatLng(elements[i].latitude, elements[i].longitude);
        marker = new L.Marker(latlng, {icon: icon}).bindPopup(address);

        if (i == 0) {
            marker.openPopup();
        }
        m.addLayer(geojsonLayer).addLayer(marker);
    }
    // Get metadata about the map from MapBox
    wax.tilejson(jsonp, function(tilejson) {
        m.addLayer(new wax.leaf.connector(tilejson));
    });
}

当我点击一个标记时,我会打开弹出窗口。但是我想在加载地图时打开第一个弹出窗口。(并在单击标记时打开其他弹出窗口)

AnN 有什么想法吗?

4

4 回答 4

5

将标记添加到地图后调用 openPopup应该没问题。

于 2012-11-09T18:08:33.600 回答
2

我假设当您单击标记时会看到弹出窗口,但是在加载地图时没有自动显示第一个标记的弹出窗口?

首先,看起来您实际上并没有使用 GeoJSON,因此不需要 GeoJSON 层(您可以只使用 FeatureLayer),但这不会导致任何问题。无论您使用什么图层组,您都应该只将其添加到地图一次,然后将所有子图层添加到图层组。您目前在“for”循环中多次添加 geojsonLayer,而您不想这样做。其次,您必须marker.openPopup()在标记添加到地图后调用。尝试将您的代码更改为如下所示:

var layerGroup = new L.FeatureGroup();
layerGroup.addTo( m );

for (var i = 0; i < elements.length; i++) {
    var address = $("<div/>").html(elements[i].address).text();
    var latlng = new L.LatLng(elements[i].latitude, elements[i].longitude);
    marker = new L.Marker(latlng, {icon: icon}).bindPopup(address);

    //You don't add the marker directly to the map.  The layerGroup has already
    //been added to the map so it will take care of adding the marker to the map
    layerGroup.addLayer( marker );

    if (i == 0) {
        marker.openPopup();
    }
}
于 2012-10-22T13:53:41.467 回答
0

我遇到了这个问题,并在我在地图上添加标记后立即添加了超时来修复它。

marker.addTo(this.map).bindPopup('Info');

setTimeout(() => {
  marker.openPopup();
}, 500);

我不知道为什么,但在某些页面上,我需要申请超时。无论如何,这是我的解决方法,希望这也适用于你们中的一些人。

于 2021-10-21T11:01:48.877 回答
0

首先添加您的地图,然后输入openPopup()

L.marker([lat, long]).bindPopup('Your message').addTo(map).openPopup();
于 2020-06-09T07:15:47.707 回答