2013-01-15 25 views
5

我有一個GoogleMaps APIv3應用程序,可以在任何時候打開多個InfoWindows。我希望能夠將一個模糊的InfoWindow放到所有其他InfoWindows的前面(如果它的任何部分被點擊) - 類似於MS Windows OS中的窗口行爲。將GoogleMaps InfoWindow置於前面

我曾想過添加一個onclick事件處理程序,它增加了InfoWindow的z-index,但事件處理程序似乎沒有被觸發。 ZIndex是一個全局變量,隨着InfoWindows的點擊而不斷增加 - 或者說這是理論。

任何人都可以幫忙嗎? 這裏是我的代碼: -

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++); 
    } 
} 

回答

5

沒有點擊事件的信息窗口,這是一個稍微有點難度了。

  1. 你需要使用一個元素(而不是字符串)作爲信息窗口的內容,因爲你需要一個DOMListener而不是一個偵聽器的信息窗口對象
  2. 當domready中,火災,必須應用點擊DOMListener來定義信息窗口

下面的代碼會爲你做這本內容節點的anchestor,添加到您的網頁:

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; 
     } 

相反的google.maps.InfoWindow()現在必須調用google.maps.InfoWindowZ()

它也返回一個真正的信息窗口,但應用到它提到聽衆。它還會在需要時從內容創建節點。

演示:http://jsfiddle.net/doktormolle/tRwnE/


更新版本visualRefresh(使用鼠標懸停,而不是點擊)http://jsfiddle.net/doktormolle/uuLBb/

+0

輝煌!謝謝,這正是我所需要的。 但是,在這行代碼中是否存在一個小錯誤: - if(ce)GM.event.removeListener(cc); //這應該是ce? 謝謝。 – dachyon

+0

是的,它應該是ce,將它固定在上面的代碼和小提琴中。 –

+0

嗨,我正在嘗試這個解決方案,但我得到'未捕獲TypeError:無法設置屬性'未定義的'InfoWindowZ'。 –

相關問題