5

一度に複数のInfoWindowsを開くことができるGoogleMapsAPIv3アプリケーションがあります。MS Windows OSのウィンドウの動作と同様に、一部がクリックされた場合に、隠されたインフォウィンドウを他のすべてのインフォウィンドウの前面に表示できるようにしたいと思います。

インフォウィンドウのz-indexを増やすonclickイベントハンドラーを追加しようと思っていましたが、イベントハンドラーが起動していないようです。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++);
   }
}
4

1 に答える 1

6

infoWindowにはクリックイベントはありません。もう少し難しいです。

  1. infowindow-objectのリスナーではなくDOMListenerが必要なため、infowindowのコンテンツとして要素(文字列ではない)を使用する必要があります。
  2. domready-firesの場合、infowindowを定義するこのコンテンツノードのアンカーにclick-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()

また、本物のインフォウィンドウを返しますが、前述のリスナーが適用されています。また、必要に応じてコンテンツからノードを作成します。

デモ: http: //jsfiddle.net/doktormolle/tRwnE/


visualRefreshの更新バージョン(クリックの代わりにマウスオーバーを使用)http://jsfiddle.net/doktormolle/uuLBb/

于 2013-01-16T03:14:47.490 に答える