2013-01-15 18 views
5

Birden fazla InfoWindows'ın herhangi bir anda açık olabileceği bir GoogleMaps APIv3 uygulamasına sahibim. MS Windows işletim sistemindeki pencerelerin davranışlarına benzer şekilde, herhangi bir parçası tıklanmışsa, tüm InfoWindows'ın önüne engelli bir InfoWindow getirebilmeyi isterim.GoogleMaps InfoWindow'u getirin

InfoWindow'un z-endeksini artıran bir onclick olay işleyicisi ekleyeceğini düşündüm, ancak olay işleyicisi tetikleniyor gibi görünmüyor. ZIndex, InfoWindows'a tıklandıkça veya devam eden teori olarak artmaya devam eden global bir değişkendir.

Herkes yardımcı olabilir mi? İşte benim kodudur: -

var ZIndex=1; 
var iw = new google.maps.InfoWindow({ content:contentString }); 
google.maps.event.addListener(iw, 'click', handleInfoWindowClick(iw)); 

function handleInfoWindowClick(infoWindow) { 
    return function() { 
     infoWindow.setZIndex(ZIndex++); 
    } 
} 

cevap

5

bu biraz daha zor, bir InfoWindow için hiç tıklama etkinliği yoktur.

  1. Eğer infowindow-nesne için yerine bir dinleyici bir DOMListener gerekir çünkü sen, infowindow için içerik olarak bir element (bir dize) kullanmanız gerekir
  2. domready-yangınlar, uygulamak gerekir ,

aşağıdaki kodu sizin için bunu yapacak InfoWindow tanımlayan bu içerik düğümün anchestor to-DOMListener tıklayın sayfanıza bu ekleyin: yerine

google.maps.InfoWindowZ=function(opts){ 
      var GM = google.maps, 
       GE = GM.event, 
       iw = new GM.InfoWindow(), 
       ce; 

      if(!GM.InfoWindowZZ){ 
       GM.InfoWindowZZ=Number(GM.Marker.MAX_ZINDEX); 
      } 

      GE.addListener(iw,'content_changed',function(){ 
       if(typeof this.getContent()=='string'){ 
        var n=document.createElement('div'); 
         n.innerHTML=this.getContent(); 
         this.setContent(n); 
         return; 
       } 
       GE.addListener(this,'domready', 
           function(){ 
           var _this=this; 
           _this.setZIndex(++GM.InfoWindowZZ); 
           if(ce){ 
            GM.event.removeListener(ce); 
           } 
           ce=GE.addDomListener(this.getContent().parentNode 
                .parentNode.parentNode,'click', 
                function(){ 
                _this.setZIndex(++GM.InfoWindowZZ); 
           }); 
           }) 
      }); 

      if(opts)iw.setOptions(opts); 
      return iw; 
     } 

of google.maps.InfoWindow(), google.maps.InfoWindowZ()

Ayrıca, belirtilen bir InfoWindow döndürür, ancak söz konusu dinleyici uygulanmış. Ayrıca gerektiğinde içerikten düğümü oluşturur.

Demo: visualRefresh için http://jsfiddle.net/doktormolle/tRwnE/


Güncelleme sürümü http://jsfiddle.net/doktormolle/uuLBb/

+0

Parlak (mouseover yerine tıklama kullanarak)! Teşekkürler tam olarak ihtiyacım olanı yaptı. Ancak, kod satırında küçük bir hata var: - (ce) { GM.event.removeListener (cc); // bu ce olmalı? Teşekkürler. – dachyon

+0

Evet, ce olmalı, yukarıdaki kodda ve kemanda sabitlenmelidir. –

+0

Merhaba, Ben bu çözümü deniyorum ama 'Uncaught TypeError alıyorum: Özellik 'InfoWindowZ' undefined 'ayarlanamaz. –

İlgili konular