2013-01-15 2 views
5

나는 한 번에 여러 InfoWindow를 열 수있는 GoogleMaps APIv3 응용 프로그램을 가지고 있습니다. 일부 InfoWindow를 클릭하면 다른 모든 InfoWindow의 앞 부분에 보이지 않는 InfoWindow를 가져올 수 있습니다. MS Windows OS의 Windows 동작과 유사합니다.Google지도 InfoWindow를 앞으로 가져 오기

InfoWindow의 z- 인덱스를 증가시키는 onclick 이벤트 핸들러를 추가하려고했지만 이벤트 핸들러가 실행되지 않는 것처럼 보였습니다. ZIndex는 InfoWindow가 클릭 될 때 계속 증가하는 전역 변수이거나 어쨌든 이론을 의미합니다.

아무도 도와 줄 수 있습니까? 다음은 내 코드입니다 : -

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 - 화재, 당신은을 적용해야 ,

은 다음 코드는 당신을 위해 이것을 할 것입니다 정보창을 정의하고이 내용 노드의 anchestor에-DOMListener를 클릭하여 페이지에이를 추가하는 대신

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()

또한 여기에는 언급 된 리스너가 적용된 정품 InfoWindow가 반환됩니다. 또한 필요에 따라 컨텐트에서 노드를 만듭니다.

데모 : visualRefresh에 대한 http://jsfiddle.net/doktormolle/tRwnE/


업데이트 버전은 http://jsfiddle.net/doktormolle/uuLBb/

+0

브릴리언트 (마우스 오버 클릭 대신 사용)! 고마워요. 정확히 내가 필요한 것을 해줍니다. 그러나 코드 줄에는 작은 버그가 있습니다. - if (ce) { GM.event.removeListener (cc); //이게 ce일까요? 감사합니다. – dachyon

+0

예, 위의 코드와 바이올린에서 수정해야합니다. –

+0

안녕하세요,이 솔루션을 시도하고 있지만'Uncaught TypeError : Undefined'의 'InfoWindowZ'속성을 설정할 수 없습니다. –

관련 문제