88

Google マップで InfoWindow を 1 つだけ開く必要があります。新しい情報ウィンドウを開く前に、他のすべての情報ウィンドウを閉じる必要があります。

誰かがこれを行う方法を教えてもらえますか?

4

11 に答える 11

155

オブジェクトを 1 つだけ作成しInfoWindow、それへの参照を保持し、すべてのマーカーに対して再利用する必要があります。Google Maps API Docs からの引用:

一度に 1 つの情報ウィンドウのみを表示する場合 (Google マップでの動作と同様)、情報ウィンドウを 1 つだけ作成する必要があります。この情報ウィンドウは、マップ イベント (ユーザーのクリックなど) で別の場所またはマーカーに再割り当てできます。

したがって、InfoWindowマップを初期化した直後にオブジェクトを作成しclick、マーカーのイベント ハンドラーを次のように処理することができます。というマーカーがあるとしましょうsomeMarker:

google.maps.event.addListener(someMarker, 'click', function() {
   infowindow.setContent('Hello World');
   infowindow.open(map, this);
});

次に、メソッドInfoWindowを呼び出さなくても、新しいマーカーをクリックすると、 が自動的に閉じます。close()

于 2010-09-15T22:55:40.513 に答える
31

情報ウィンドウをスコープ外に作成して、共有できるようにします。

以下に簡単な例を示します。

var markers = [AnArrayOfMarkers];
var infowindow = new google.maps.InfoWindow();

for (var i = 0, marker; marker = markers[i]; i++) {
  google.maps.event.addListener(marker, 'click', function(e) {
    infowindow.setContent('Marker position: ' + this.getPosition());
    infowindow.open(map, this);
  });
}
于 2010-08-05T07:14:38.813 に答える
14

私は同じ問題を抱えていましたが、最良の答えはそれを完全に解決しませんでした.forステートメントでしなければならなかったことは、現在のマーカーに関連する this を使用することでした。多分これは誰かを助けるでしょう。

for(var i = 0; i < markers.length; i++){
    name = markers[i].getAttribute("name");
    address = markers[i].getAttribute("address");        
    point = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));                                     
    contentString = '<div style="font-family: Lucida Grande, Arial, sans-serif;>'+'<div><b>'+ name +'</b></div>'+'<div>'+ address +'</div>';                    
    marker = new google.maps.Marker({                       
        map: map,
        position: point,
        title: name+" "+address,
        buborek: contentString 
    });                                     
    google.maps.event.addListener(marker, 'click', function(){
        infowindow.setContent(this.buborek); 
        infowindow.open(map,this); 
    });                                                         
    marker.setMap(map);                 
}
于 2011-09-01T08:24:40.293 に答える
5

少し遅れましたが、infowindow をグローバル変数にすることで、infowindow を 1 つだけ開くことができました。

var infowindow = new google.maps.InfoWindow({});

次に、リスナー内

infowindow.close();
infowindow = new google.maps.InfoWindow({   
    content: '<h1>'+arrondissement+'</h1>'+ gemeentesFiltered                           
});

infowindow.open(map, this);
于 2014-06-08T09:26:19.297 に答える
0

以前のInfoWindowオブジェクトを追跡し、新しいマーカーでクリック イベントを処理するときにcloseメソッドを呼び出す必要があります。

: 共有情報ウィンドウ オブジェクトで close を呼び出す必要はありません。別のマーカーで open を呼び出すと、元のウィンドウが自動的に閉じられます。詳細については、ダニエルの回答を参照してください。

于 2009-12-09T23:23:11.850 に答える
-1

このように解決しました:

function window(content){
    google.maps.event.addListener(marker,'click', (function(){
        infowindow.close();
        infowindow = new google.maps.InfoWindow({
            content: content
        });
        infowindow.open(map, this);
    }))
}
window(contentHtml);
于 2015-02-26T08:52:30.057 に答える
-5

Google マップでは、情報ウィンドウを 1 つだけ開くことができます。したがって、新しいウィンドウを開くと、もう一方のウィンドウは自動的に閉じます。

于 2009-12-09T17:58:17.950 に答える