[javascript] Google지도 : InfoWindows를 자동으로 닫으시겠습니까?

내 사이트 에서 Google Maps API v3를 사용하여지도에 집 마커를 배치하고 있습니다.

닫기 아이콘을 명시 적으로 클릭하지 않는 한 InfoWindows는 열려 있습니다. 즉,지도 표시 위로 마우스를 가져 가면 한 번에 2 개 이상의 InfoWindows를 열 수 있습니다.

질문 : 현재 활성화 된 InfoWindow 만 열리고 다른 모든 InfoWindows는 닫히도록하려면 어떻게해야합니까? 한 번에 하나 이상의 InfoWindow가 열리지 않습니까?



답변

close ()를 정보창을위한 기능. 마지막으로 열린 창을 추적하고 새 창이 생성되면 닫기 기능을 호출하십시오.

이 데모 에는 원하는 기능이 있습니다. Maps API V3 데모 갤러리 에서 찾았습니다 .


답변

많은 정보 창을 사용하여 이에 대한 대체 솔루션 : 이전에 열린 정보 창을 변수에 저장 한 다음 새 창이 열리면 닫습니다.

var prev_infowindow =false;
...
base.attachInfo = function(marker, i){
    var infowindow = new google.maps.InfoWindow({
        content: 'yourmarkerinfocontent'
    });

    google.maps.event.addListener(marker, 'click', function(){
        if( prev_infowindow ) {
           prev_infowindow.close();
        }

        prev_infowindow = infowindow;
        infowindow.open(base.map, marker);
    });
}


답변

//assuming you have a map called 'map'
var infowindow = new google.maps.InfoWindow();

var latlng1 = new google.maps.LatLng(0,0);
var marker1 = new google.maps.Marker({position:latlng1, map:map});
google.maps.event.addListener(marker1, 'click',
    function(){
        infowindow.close();//hide the infowindow
        infowindow.setContent('Marker #1');//update the content for this marker
        infowindow.open(map, marker1);//"move" the info window to the clicked marker and open it
    }
);
var latlng2 = new google.maps.LatLng(10,10);
var marker2 = new google.maps.Marker({position:latlng2, map:map});
google.maps.event.addListener(marker2, 'click',
    function(){
        infowindow.close();//hide the infowindow
        infowindow.setContent('Marker #2');//update the content for this marker
        infowindow.open(map, marker2);//"move" the info window to the clicked marker and open it
    }
);

이렇게하면 정보 창을 클릭 한 각 마커로 “이동”하여 사실상 자동으로 닫혔다가 새 위치에서 다시 열립니다 (및 뷰포트에 맞게 패닝). 원하는 효과를 내기 위해 열기 전에 내용을 변경합니다. n 마커에 대해 작동합니다.


답변

내 솔루션.

var map;
var infowindow = new google.maps.InfoWindow();
...
function createMarker(...) {
var marker = new google.maps.Marker({
     ...,
     descrip: infowindowHtmlContent
});
google.maps.event.addListener(marker, 'click', function() {
    infowindow.setOptions({
        content: this.descrip,
        maxWidth:300
    });
    infowindow.open(map, marker);
});


답변

이 링크에서 http://www.svennerberg.com/2009/09/google-maps-api-3-infowindows/ :

Teo :이 작업을 수행하는 가장 쉬운 방법은 반복해서 재사용하는 InfoWindow 개체의 인스턴스를 하나만 갖는 것입니다. 이렇게하면 새 마커를 클릭하면 infoWindow가 현재있는 위치에서 새 마커를 가리 키도록 “이동”됩니다.

setContent 메소드를 사용하여 올바른 컨텐츠로로드하십시오.


답변

활성 창에 대한 변수 선언

var activeInfoWindow; 

이 코드를 마커 리스너에 바인딩합니다.

 marker.addListener('click', function () {
    if (activeInfoWindow) { activeInfoWindow.close();}
    infowindow.open(map, marker);
    activeInfoWindow = infowindow;
});


답변

close () 함수를 사용하는 것 외에 더 쉬운 방법이 있습니다. InfoWindow 속성으로 변수를 생성하면 다른 변수를 열 때 자동으로 닫힙니다.

var info_window;
var map;
var chicago = new google.maps.LatLng(33.84659, -84.35686);

function initialize() {
    var mapOptions = {
        center: chicago,
        zoom: 14,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

    info_window = new google.maps.InfoWindow({
        content: 'loading'
    )};

createLocationOnMap('Location Name 1', new google.maps.LatLng(33.84659, -84.35686), '<p><strong>Location Name 1</strong><br/>Address 1</p>');
createLocationOnMap('Location Name 2', new google.maps.LatLng(33.84625, -84.36212), '<p><strong>Location Name 1</strong><br/>Address 2</p>');

}

function createLocationOnMap(titulo, posicao, conteudo) {
    var m = new google.maps.Marker({
        map: map,
        animation: google.maps.Animation.DROP,
        title: titulo,
        position: posicao,
        html: conteudo
    });

    google.maps.event.addListener(m, 'click', function () {
        info_window.setContent(this.html);
        info_window.open(map, this);
    });
}