4

ストリートビュー パノラマ、情報ウィンドウ、ドラッグ可能なマーカーを備えた地図があります。マーカーがドラッグされた後、関数は getPanoramaByLocation をリクエストして、ビュー サービスが利用可能かどうかを確認します。そうでない場合は、情報ウィンドウを閉じます。それは素晴らしいことですが、マーカーをもう一度クリックすると、情報ウィンドウが開かなくなりました。何が間違っているか知っていますか?TX

    var sv = new google.maps.StreetViewService();

    function initialize() {

        var optionMap = {
            zoom: 13,
            center: new google.maps.LatLng(47.390251,0.68882),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var myMap = new google.maps.Map(document.getElementById("mapDiv"), optionMap);
        var optionsMarker = {
            position: new google.maps.LatLng(47.390251,0.68882),
            map: myMap,
            draggable: true,
            title: "my marker"
            }
        var marker = new google.maps.Marker(optionsMarker);
        var infowindowDiv = '<div id="streetview" style="width:300px;height:200px;"' +'</div>';

        var infoWindow = new google.maps.InfoWindow({
            content: infowindowDiv,
            position: myMap.getCenter() });

        google.maps.event.addListener(marker, 'click', function() {
         infoWindow.open(myMap, marker);
         });

        google.maps.event.addListener(infoWindow, 'domready', function() {
            var panorama = new
        google.maps.StreetViewPanorama(document.getElementById("streetview"));
            panorama.setPosition(infoWindow.getPosition());

        google.maps.event.addListener(marker, 'dragend', function(event) {
          sv.getPanoramaByLocation(event.latLng, 50, processSVData);});             

        function processSVData(data, status) {
          if (status == google.maps.StreetViewStatus.OK) {

              var markerPanoID = data.location.pano;
              // Set the Pano to use the passed panoID
              panorama.setPano(markerPanoID);
              panorama.setPov({
                heading: 270,
                pitch: 0,
                zoom: 1
              });
              panorama.setVisible(true);
            } 
            else {
            infoWindow.close();
            infoWindow = null;              
            };
        }                   
    }); 
    }
4

2 に答える 2

2

GMaps API ドキュメントから:

close() None    Closes this InfoWindow by removing it from the DOM structure.

https://developers.google.com/maps/documentation/javascript/reference#InfoWindow

だから...情報ウィンドウを閉じると、消えてしまいます。永遠に。さらに、「infoWindow = null;」と言って、それがなくなったことを本当に確認する場合はなおさらです。あなたは新しいものを作らなければなりません。私のアドバイスは、オンデマンドで情報ウィンドウを作成して返す別の関数を持つようにコードをリファクタリングすることです。クリック イベントの定義で、infowindow が null かどうかを確認し、null の場合は新しいウィンドウを取得します。

HTH

于 2012-05-18T16:46:37.490 に答える
1

他の回答が説明しているように、ユーザーが閉じるボタンをクリックすると、インフォボックスhtmlはDOMから削除されますが、JSオブジェクトはまだそこにあります。

情報ウィンドウを作成するときは、openメソッドを呼び出して地図上に表示する必要があります

myInfoWindow.open(mymap);

したがって、「closeclick」イベントをリッスンし、情報ウィンドウの状態を維持する場合

var infoWindowClosed = false;
google.maps.event.addListener(myInfoBox, "closeclick", function () {
    infoWindowClosed = true;
});

myInfoWindowをオンデマンドで再度開くことができます

if(infoWindowClosed){
    myInfoWindow.open(mymap);
}
于 2013-02-05T20:11:05.617 に答える