2

私は現在、それらを追跡するために配列に格納するマーカーの束を持っています。特定のリンクをクリックすると、そのマーカーの情報ウィンドウが開きます。クリックリスナーをチェックして、開きたい情報ウィンドウが現在開いている情報ウィンドウであるかどうかを確認する方法はありますか?もしそうなら、情報ウィンドウを閉じて再度開いてはいけませんか?

現在のJavaScript:

<script type="text/javascript">
    var infowindow = null;
    var stored_markers = new Array();

    function initialize() 
    {
        var latlng = new google.maps.LatLng(0,0);
        var myOptions = {
            zoom: 1,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

        setMarkers(map, items);
        infowindow = new google.maps.InfoWindow({
        content: "holding..."
        });
    }

    var items = [
        ['title 1 to display on hover', latitude 1, longitude 1, z-index 1, 'infowindow 1 content'],
        ['title 2 to display on hover', latitude 2, longitude 2, z-index 2, 'infowindow 2 content'],
        ['title 3 to display on hover', latitude 3, longitude 3, z-index 3, 'infowindow 3 content']
    ];

    function setMarkers(map, markers) 
    {
        for (var i = 0; i < markers.length; i++) 
        {
            var sites = markers[i];
            var siteLatLng = new google.maps.LatLng(sites[1], sites[2]);
            var marker = new google.maps.Marker({
                position: siteLatLng,
                map: map,
                title: sites[0],
                zIndex: sites[3],
                html: sites[4]
            });
            stored_markers.push(marker);
            //initial content string
            var contentString = "Some content";

            //attach infowindow on click
            google.maps.event.addListener(marker, "click", function () 
            {
                infowindow.setContent(this.html);
                infowindow.open(map, this);
            });

        }
    }

</script>
4

4 に答える 4

0

API v3 では、情報ウィンドウが開いているかどうかを確認するためにこれだけが必要です。 if (infoWindow.getMap())

マーカーを特定の infoWindow にリンクする場合は、各 infoWindow のインデックスがそのマーカーのインデックスと一致する配列を作成することができます。次に、infoWindow[marker_index]必要なものを簡単に確認できます。

于 2017-01-06T15:57:56.027 に答える
0

@wf9a5m75の提案に従って、infoWindowをプロパティとしてマーカーに追加しました

marker.infoWindow = new google.maps.InfoWindow({
 content: 'Some info window content'
});

クリックイベントにリスナーも追加しました

marker.addListener('click', () => markerClickHandler(marker));

このハンドラーで、このような開いている情報ウィンドウを確認します

function markerClickHandler(marker) {
 if (mapHasOpenInfo()) {
   // some code
 }  
}

そして、これは開いているマーカーを見つけるメソッドです。必要なのは、マップ オブジェクトのすべてのマーカーを含む配列だけです。

function mapHasopenInfo(markers) {
  return markers.find(marker => marker.isOpen === true);
}
于 2021-01-30T16:53:22.030 に答える