2013-07-04 2 views
0

Можно ли отображать только одно окно на карте Google с несколькими инфо-окнами для нескольких маркеров.Как отображать только одно информационное окно за раз на картах Google api v3

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

Спасибо.

ответ

1

Вот код javascript, который я использовал при отображении одного маркера за раз.

После обыска почти 3 часов я понял это и простой способ, если добавить несколько маркеров таким образом

var markerArray=[]; 

    for (var i = 0; i < markers.length; i++) 
      { 
       var newMarker = new google.maps.Marker({ 
        map: map, 
        position: new google.maps.LatLng(markers[i].Latitude, markers[i].Longitude), 
        title: markers[i].Name + ", "+ markers[i].Address, 
        draggable: false 
       }); 

       var statusStr; 
       //Set marker icon depending upon current stage 
       switch (markers[i].Stage) 
       { 
        //Stage 1 - Brochure 
        case 5: newMarker.setIcon(stage1MarkerImage); 
         statusStr = 'Current Status - <select id="status"> <option id="5" value="Brochure" selected="selected">Brochure</option><option id="6" value="Demo">Demo</option><option id="7" value="Site Visit">Site Visit</option><option id="8" value="Lease Approval">Lease Approval</option></select>'; 
         break; 
         //Stage 2 - Demo 
        case 6: newMarker.setIcon(stage2MarkerImage); 
         statusStr = 'Current Status - <select id="status"> <option id="5" value="Brochure" >Brochure</option><option id="6" value="Demo" selected="selected">Demo</option><option id="7" value="Site Visit">Site Visit</option><option id="8" value="Lease Approval">Lease Approval</option></select>'; 
         break; 
         //Stage 3 - Site Visit 
        case 7: newMarker.setIcon(stage3MarkerImage); 
         statusStr = 'Current Status - <select id="status"> <option id="5" value="Brochure" >Brochure</option><option id="6" value="Demo" >Demo</option><option id="7" value="Site Visit" selected="selected">Site Visit</option><option id="8" value="Lease Approval">Lease Approval</option></select>'; 
         break; 
         //Stage 4 - Lease Approval 
        case 8: newMarker.setIcon(stage4MarkerImage); 
         statusStr = 'Current Status - <select id="status"> <option id="5" value="Brochure" >Brochure</option><option id="6" value="Demo" >Demo</option><option id="7" value="Site Visit" ><Site Visit/option><option id="8" value="Lease Approval" selected="selected">Lease Approval</option></select>'; 
         break; 
       } 



       newMarker["infoWindow"] = new google.maps.InfoWindow({ 
        content: 
       '<div class="infoWindow">' + 
       '<header>' + markers[i].Name + '</header>' + 
       '<div style="clear: both;"></div>' + 
       '<div class="content">' + 
       '<p>' + markers[i].Address + ', ' + markers[i].City + ', ' + markers[i].State + ', ' + markers[i].CountryName + '</p>' + 
       '<p>' + 
       statusStr+ 
       '<label id="update-status" onclick="updateCustomerStep(this);" data-id="' + markers[i].Id + '" >Update</label>' + 
       '</p>' + 
       '</div>' + 
       '</div>' 
       }); 

       google.maps.event.addListener(newMarker, 'click', function() { 

        for (var i = 0; i < markerArray.length; i++) 
        { 
         var currentMarker = markerArray[i]; 
         currentMarker["infoWindow"].close(); 
         console.log(currentMarker); 
        } 

        this['infoWindow'].open(map, this); 

       }); 

       markerArray.push(newMarker); 
      } 
+0

Nooooooooo! Если только одно информационное окно будет открыто одновременно, создайте ONE infoWindow и измените его содержимое всякий раз, когда он будет открыт. –

+0

Что делать, если у вас есть создание и открытие содержимого infowindow из базы данных, скажем, для нескольких магазинов, как оно получит его содержимое, и что, если мне нужно будет изменить значок значка с помощью кнопки содержимого infowindow, будет работать одно из них. Можете ли вы предложить обновления в приведенном выше коде (рабочие), чтобы соответствовать этому решению. –

1

Я играл вокруг с кодом для немного и закончился с этим:

var markerArray = [];//necessary??? 

var infoHTML = '<div class="infoWindow"><header></header><div style="clear: both;"></div><div class="content"><p class="address"></p><p>Current Status - <select id="status"> <option value="5">Brochure</option><option value="6">Demo</option><option value="7">Site Visit</option><option value="8">Lease Approval</option></select><label>Update</label></p></div></div>'; 

//One infoWindow with dynamic content 
var infoWindow = new google.maps.InfoWindow({ 
    content: infoHTML 
}); 

$(infoWindow).find("label").on('click', function() { 
    var stage = $(this).prev("select").val(); 
    var marker = $(this).data('marker') 
    marker.data.Stage = stage; 
    updateCustomerStep(marker, stage); 
}); 

function openInfoWin() { 
    var data = this.data; 
    var $infoWindow = $(infoWindow); 
    var $select = $infoWindow.find("select").val(data.Stage); 
    $infoWindow.find("label").data('marker',this); 
    $infoWindow.find("header").text(data.Name); 
    $infoWindow.find(".address").text([data.Address, data.City, data.State, data.CountryName].join(', ')); 
    infoWindow.open(map, this); 
} 

for (var i = 0; i < markers.length; i++) { 
    var data = markers[i]; 

    newMarker = new google.maps.Marker({ 
     map: map, 
     position: new google.maps.LatLng(data.Latitude, data.Longitude), 
     title: data.Name + ", " + data.Address, 
     draggable: false 
    }); 

    //Set marker icon depending upon current stage 
    switch (data.Stage) { 
     case 5: newMarker.setIcon(stage1MarkerImage); break;//Stage 1 - Brochure 
     case 6: newMarker.setIcon(stage2MarkerImage); break;//Stage 2 - Demo 
     case 7: newMarker.setIcon(stage3MarkerImage); break;//Stage 3 - Site Visit 
     case 8: newMarker.setIcon(stage4MarkerImage); break;//Stage 4 - Lease Approval 
    } 

    newMarker.data = data; 
    google.maps.event.addListener(newMarker, 'click', openInfoWin); 
    markerArray.push(newMarker);//necessary??? 
} 

Примечания:

  • непроверенных
  • Параметры статуса теперь имеют значение, равное значению id.
  • markerArray больше не требуется, если он не используется в коде.
  • необходимо изменить функцию updateCustomerStep, чтобы иметь формальные переменные (маркер, этап).
+0

Ну, я скоро проверю этот код и ответ. Но спасибо за ваше время и усилия. –

3

Так я решил, что это, как следовать

var infoWindowsOpenCurrently;// A temporarily variable to save currently opened info window 
google.maps.event.addListener(marker, 'click', function() { 
    typeof infoWindowsOpenCurrently !== 'undefined' && infoWindowsOpenCurrently.close();//if variable is defined close 
    infowindow.open(map, marker); 
    infoWindowsOpenCurrently = infowindow;//set current info window to temporary variable 
}); 
Смежные вопросы