Я прочитал много решений и попробовал несколько, но в моем сценарии я не могу сделать это.

Мне нравится закрывать активное информационное окно при нажатии другого маркера.

Часть кода:

        for (var i = 0; i < locations.length; i++) {
          var centrum = locations[i];
          var myLatLng = new google.maps.LatLng(centrum[1], centrum[2]);
          var marker = new google.maps.Marker({
              position: myLatLng,
              map: map,
              animation: google.maps.Animation.DROP,
              icon: image,
              shape: shape,
              title: centrum[0],
              zIndex: centrum[3]
          });
          marker['infowindow'] = new google.maps.InfoWindow({
              content: '<b>Informatie:</b><br>' + centrum[0]
          });
          google.maps.event.addListener(marker, 'click', function() {
              marker['infowindow'].close(); // has to close another active window
              this['infowindow'].open(map, this);
          });
        }

Кто-то намек или лучше ... решение?

Спасибо.

1
Harry 30 Янв 2013 в 23:04

2 ответа

Лучший ответ

Сохраните маркеры в массиве и добавьте вызов для функции, чтобы закрыть все окна перед открытием текущего:

function closeInfos() {
    for(var i=0; i<markers.length; i++)
    {
        markers[i]['infowindow'].close();
    }
}

< Сильный > EDIT :

С вашим кодом это должно выглядеть примерно так:

var markers = [];
for (var i = 0; i < locations.length; i++) {
          var centrum = locations[i];
          var myLatLng = new google.maps.LatLng(centrum[1], centrum[2]);
          var marker = new google.maps.Marker({
              position: myLatLng,
              map: map,
              animation: google.maps.Animation.DROP,
              icon: image,
              shape: shape,
              title: centrum[0],
              zIndex: centrum[3]
          }));
          marker['infowindow'] = new google.maps.InfoWindow({
              content: '<b>Informatie:</b><br>' + centrum[0]
          });
          markers.push(marker);
          google.maps.event.addListener(marker, 'click', function() {
              closeInfos();
              this['infowindow'].open(map, this);
          });
        }
3
Philippe Boissonneault 30 Янв 2013 в 20:42

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

var infowindow = new google.maps.InfoWindow({content: "some text here..."});

Это способ сделать это, теперь вы создаете много экземпляров этого класса ..

Ознакомьтесь с полной скрипкой

< Сильный > Edit:

Информационные окна с уникальным контентом fiddle

1
Mauno Vähä 31 Янв 2013 в 07:51