1

我有一张带有一些标记和标记簇的地图,它工作正常。我向它们添加了信息框并且它们可以工作,但问题是,当我缩小并且信息框打开时,标记将消失(并被添加到标记簇中)并且框将保留在那里,打开,下面没有标记。

我可以使用在缩放更改时关闭所有信息框的简单解决方案,但我什至无法实现。我遇到的问题是,在我的听众内部,由于某种原因我无法访问我的标记。这是我的代码:

var infoList = [];

function initialize() {
    var mapOptions = {
      ...
    };
    var map = new google.maps.Map(document.getElementById("map"),
        mapOptions);
    var imageUrl = 'pin.png';
    var markers = []; 
    var markerImage = new google.maps.MarkerImage(imageUrl, new google.maps.Size(51, 71));

    for (var i = 0; i < data.photos.length; i++) { 
        var dataPhoto = data.photos[i];
        var latLng = new google.maps.LatLng(dataPhoto.latitude, dataPhoto.longitude);
        var marker = new google.maps.Marker({
            position: latLng,
            icon: markerImage,
            title: dataPhoto.photo_title
        });
        boxText = document.createElement("div"),

        infoboxOptions = {
            alignBottom:true,
            content: boxText,
            disableAutoPan: false,
            maxWidth: 0,
            pixelOffset: new google.maps.Size(-60, -70),
            zIndex: null,
            boxStyle: { 
              width: "280px"
             },
            closeBoxMargin: "12px 4px 2px 2px",
            closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif",
            infoBoxClearance: new google.maps.Size(1, 1),
            isHidden: false,
            pane: "floatPane",
            enableEventPropagation: false
        };

        markers.push(marker);

        markers[i].infobox = new InfoBox(infoboxOptions);

        google.maps.event.addListener(marker, 'click', (function(marker, i) {
            return function() {
                markers[i].infobox.open(map, this);
                map.panTo(latLng);
            }
        })(marker, i));

    }

    var markerCluster = new MarkerClusterer(map, markers);

    google.maps.event.addListener(map, 'zoom_changed', function(markers){
        /*Here markers is undefined*/
        if (! markers.length) { return; }
        for (i in markers) {
           markers[i].infoBox.close();
        }

    });
}
    google.maps.event.addDomListener(window, 'load', initialize);
4

2 回答 2

2

您正在 zoom_changed 侦听器中创建一个新的“标记”变量。从参数列表中删除“标记”:

google.maps.event.addListener(map, 'zoom_changed', function(){
    if (! markers.length) { return; }
    for (i in markers) {
       markers[i].infobox.close();
    }
});

您的代码不一致,您正在创建的标记的属性是:

markers[i].infobox = new InfoBox(infoboxOptions);

我更改了上述内容(在调试器中对您来说应该很明显)。

于 2013-04-09T07:40:45.313 回答
0

正如您所提到的,如果您想在缩小或放大时关闭地图中的所有信息窗口,那么您可以使用此代码。它会帮助你。

google.maps.event.addListener(map, 'zoom_changed', function() {
infoWindow.close();
});
于 2013-04-09T07:39:15.440 回答