хорошо закройте другие информационные окна - PullRequest
0 голосов
/ 25 февраля 2011

Сейчас я делаю это, чтобы создать маркеры для моей карты Google.

function createMarker(posn, title, html) {
            var marker = new google.maps.Marker({ position: posn, title: title, draggable: false });
            marker['infowindow'] = new google.maps.InfoWindow({ content: html });

            infoWindows.push(marker['infowindow']);
            google.maps.event.addListener(marker, "click", function () {
                for (i = 0; i < infoWindows.length; i++) {
                    infoWindows[i].close();
                }
                this['infowindow'].open(map, this);
            });
            return marker;
        }

Я не доволен циклом for, для закрытия маркеров, я знаю, что нечто подобное можно сделать, используя одну ссылку:

if (infowindow) infowindow.close ();

причина, по которой я использую код, описанный выше, в том, что я делаю что-то вроде
markers[myPoint]['infowindow'].open(map, markers[myPoint]); еще где, (myPoint - это число).

как я могу избежать этого для цикла, чтобы закрыть открытые окна и сделать это хорошим способом?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

Просто сохраните последнее открытое информационное окно в глобальной переменной:

var activeInfoWindow;

function createMarker(posn, title, html) {
    var marker = new google.maps.Marker({ position: posn, title: title, draggable: false });
    marker['infowindow'] = new google.maps.InfoWindow({ content: html });

    infoWindows.push(marker['infowindow']);
    google.maps.event.addListener(marker, "click", function () {
        if ( activeInfoWindow == this['infowindow'] ) {
            return;
        }
        if ( activeInfoWindow ) {
            activeInfoWindow.close();
        }

        this['infowindow'].open(map, this);
        activeInfoWindow = this['infowindow'];
    });
    return marker;
}
2 голосов
/ 25 февраля 2011

Еще один способ сделать это - иметь только одно InfoWindow, и в случае щелчка маркера вы вызываете свойство setContent InfoWindow, а затем событие открытия с картой и маркером в качестве параметров.

Я нашел этот метод лучше в моем приложении, где у меня есть 10 000+ маркеров на карте.

см .: http://code.google.com/apis/maps/documentation/javascript/reference.html#InfoWindow

infoWindow = new google.maps.InfoWindow();

function createMarker(posn, title, html) {
    var marker = new google.maps.Marker({ position: posn, title: title, draggable: false });
    marker['content'] = html;
    google.maps.event.addListener(marker, "click", function () {
        infoWindow.setContent(this['content']);
        infoWindow.open(map, this);
    });
    return marker;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...