Google マップで InfoWindow を 1 つだけ開く必要があります。新しい情報ウィンドウを開く前に、他のすべての情報ウィンドウを閉じる必要があります。
誰かがこれを行う方法を教えてもらえますか?
Google マップで InfoWindow を 1 つだけ開く必要があります。新しい情報ウィンドウを開く前に、他のすべての情報ウィンドウを閉じる必要があります。
誰かがこれを行う方法を教えてもらえますか?
オブジェクトを 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()
情報ウィンドウをスコープ外に作成して、共有できるようにします。
以下に簡単な例を示します。
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);
});
}
私は同じ問題を抱えていましたが、最良の答えはそれを完全に解決しませんでした.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);
}
少し遅れましたが、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);
以前のInfoWindowオブジェクトを追跡し、新しいマーカーでクリック イベントを処理するときにcloseメソッドを呼び出す必要があります。
注: 共有情報ウィンドウ オブジェクトで close を呼び出す必要はありません。別のマーカーで open を呼び出すと、元のウィンドウが自動的に閉じられます。詳細については、ダニエルの回答を参照してください。
このように解決しました:
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);
Google マップでは、情報ウィンドウを 1 つだけ開くことができます。したがって、新しいウィンドウを開くと、もう一方のウィンドウは自動的に閉じます。