JavaScript API Google Maps - одно информационное окно, открытое одновременно. - PullRequest
1 голос
/ 18 августа 2010

Это вопросы, касающиеся infowindow в API карт Google v3 ..

В настоящее время я зацикливаю эту функцию и размещаю маркеры ..

function addPostCode(zip, html) 
{
   geocoder.geocode( { 'address': zip}, function(results, status) 
   {
      if (status == google.maps.GeocoderStatus.OK)
      {
         map.setCenter(results[0].geometry.location);
         var marker = new google.maps.Marker({
         map: map,
         position: results[0].geometry.location,
         name: zip
      });
});

Теперь я хотел бы добавить информационные окна с уникальным HTML, однако мне бы хотелось следующее поведение.

Когда информационное окно открывается событием, все текущие информационные окна закрываются, оставляя только новое настоящее.

Возможно ли это, и как мне это сделать? Поиск документации по этому вопросу оказывается трудным ..

Ответы [ 4 ]

3 голосов
/ 18 августа 2010

Создайте одно информационное окно в вашей инициализации. В вашем событии / слушателе, где вы хотите открыть информационное окно, вы должны установить содержимое и открыть информационное окно на маркере / местоположении на карте.

// Initialize infowindow
var infowindow = new google.maps.InfoWindow({content: ''});

function add_marker(point, name, content)
{
   var marker = new google.maps.Marker({
      map: map,
      position: point,
      dragable: false,
      clickable: true,
      name: name
   });
   marker.content = content;
   google.maps.event.addListener(marker, 'click', function()
   {
      infowindow.content = marker.content;
      infowindow.open(map, marker);
   });
   return marker;
};

function addPostCode(zip, html) 
{
   geocoder.geocode( { 'address': zip}, function(results, status) 
   {
      if (status == google.maps.GeocoderStatus.OK)
      {
         map.setCenter(results[0].geometry.location);
         var marker = add_marker(results[0].geometry.location, zip, html)
      });
});

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

API Карт Google, версия 3, добавление информационного окна к каждому маркеру

1 голос
/ 23 августа 2012
var currentInfoWindow = ''; //Global variable

google.maps.event.addListener(marker, 'click', function()
   {
      if(currentInfoWindow != '')
      { 
        currentInfoWindow.close();
        currentInfoWindow = '';
      }
      var infoWindow = new google.maps.InfoWindow({content: 'COntent'});
      infowindow.open(map, marker);
      currentInfoWindow = infowindow;
   });
0 голосов
/ 18 августа 2010

Есть два способа сделать это ... во-первых, создать единое информационное окно и просто использовать метод .setOptions информационного окна для обновления content.

Второй способ сделать это - просто установить переменную уровня модуля в вашем коде, чтобы она содержала «активное» окно ... и затем, если какое-либо окно infoWindow открыто, вызвать его .closeметод перед открытием нового.

0 голосов
/ 18 августа 2010

Вам, вероятно, лучше спросить Группы Google о API Карт Google v3 об этом и о любых других связанных вопросах.

Я не использовал API v3, но какНасколько я знаю, за один раз можно открыть только одно информационное окно, так что это произойдет автоматически.

...