Как закрыть информационное окно с помощью Google Maps 3 API? - PullRequest
0 голосов
/ 14 мая 2010

Я видел другие посты, но у них нет маркеров, проходящих через динамически, как у меня.Как создать событие, которое закроет информационное окно при нажатии на другой маркер, используя следующий код?

$(function(){
    var latlng = new google.maps.LatLng(45.522015,-122.683811);
    var settings = {
        zoom: 10,
        center: latlng,
        disableDefaultUI:false,
        mapTypeId: google.maps.MapTypeId.SATELLITE
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), settings);

    $.getJSON('api',function(json){
        for (var property in json) {
            if (json.hasOwnProperty(property)) {
                var json_data = json[property];
                var the_marker = new google.maps.Marker({
                    title:json_data.item.headline,
                    map:map,
                    clickable:true,
                    position:new google.maps.LatLng(
                        parseFloat(json_data.item.geoarray[0].latitude),
                        parseFloat(json_data.item.geoarray[0].longitude)
                    )
                });
                function buildHandler(map, marker, content) {
                    return function() {
                        var infowindow = new google.maps.InfoWindow({
                            content: '<div class="marker"><h1>'+content.headline+'</h1><p>'+content.full_content+'</p></div>'
                        });
                        infowindow.open(map, marker);
                    };
                }
                new google.maps.event.addListener(the_marker, 'click',buildHandler(map, the_marker, {'headline':json_data.item.headline,'full_content':json_data.item.full_content}));
            }
        }
    });
});

1 Ответ

0 голосов
/ 25 мая 2010

Я наконец-то понял это ... нет, спасибо кому-нибудь здесь ... На самом деле это было довольно просто:

Сначала настройте несколько переменных для хранения информационного окна:

var infowindow;

Затем добавьте это к любой функции onClick, которая запускает другой infowindow.open (). Поместите это выше открытого, хотя:

if(infowindow) {infowindow.close()}

Внутри вашего цикла или, в любом случае, вы добавляете маркеры.

например. в действии:

В самом верху моего сценария:

var infowindow;

Внутри моего цикла добавления маркеров:

function buildHandler(map, marker, content) {
    return function() {
        if(infowindow) {infowindow.close()}
        infowindow = new google.maps.InfoWindow({
            content: 'My Content here'
        });
        infowindow.open(map, marker);
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...