3

別の情報ウィンドウを開いたときに Google マップが情報ウィンドウを閉じるように、このコードを変更する方法を誰かが知っていますか?

つまり、情報ウィンドウを常に 1 つだけ開いておきたいということです。私はstackoverflowを見回しましたが、このコードで人々のソリューションを実装しているようには見えませんでした.

function initMapsDealers(){

objectLocation = new google.maps.LatLng(25.64152637306577, 1.40625);

var myOptions = {
    scrollwheel: false,
    zoom: 2,
    center: objectLocation,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}

var map = new google.maps.Map(document.getElementById("map-canvas-dealers"), myOptions);
var image1 = '/gfx/iconPloegerGreen.png';
var image2 = '/gfx/iconPloegerGreen.png';
var image3 = '/gfx/iconPloegerDealer.png';

/* Info windows */
<?

function replace_newline($string) {
  return (string)str_replace(array("\r", "\r\n", "\n"), '', $string);
}


$i = 0;
foreach($dealers as $dealer)
{
    $dealerLanden[$dealer['Land']][] = $dealer;

    if($dealer['lat'] != "" && $dealer['lon'] != "")
    {
        $i++;

        ?>
        objectLocation<?= $i; ?> = new google.maps.LatLng(<?= $dealer['lat']; ?>, <?= $dealer['lon']; ?>);

        var contentString<?= $i; ?> =
            '<div class="infoWindow">'+
            '<strong><?= str_replace("'","", $dealer['name']); ?></strong><br>'+
            '<?= replace_newline($dealer['content']); ?>'+
            '</div>';

        var infowindow<?= $i; ?> = new google.maps.InfoWindow({
            content: contentString<?= $i; ?>
        }); 

        var marker<?= $i; ?> = new google.maps.Marker({
            position: objectLocation<?= $i; ?>,
            title:"<?= $dealer['name']; ?>",
            map: map,
            icon: <?

            if($dealer['group'] == "Hoofdkantoor"){ ?>image1<? }
            elseif($dealer['group'] == "Oxbo"){ ?>image2<? }
            elseif($dealer['group'] == "Dealers"){ ?>image3<? } 
            else{ ?>image1<? }?>

        }); 

        google.maps.event.addListener(marker<?= $i; ?>, 'click', function() {
            infowindow<?= $i; ?>.open(map,marker<?= $i; ?>);
        });
        <?
    }
}

?>                      

resizeSection();

};
4

2 に答える 2

3

InfoWindowの InfoWindow API ドキュメントが1 つだけ必要な場合は、どうすればよいかという Google の推奨事項があります。

それは:

InfoWindow は、Marker オブジェクト (この場合、それらの位置はマーカーの位置に基づいています) または指定された LatLng でマップ自体にアタッチできます。一度に 1 つの情報ウィンドウのみを表示する場合 (Google マップでの動作と同様)、情報ウィンドウを 1 つだけ作成する必要があります。この情報ウィンドウは、マップ イベント (ユーザーのクリックなど) で別の場所またはマーカーに再割り当てできます。ただし、Google Maps API の V2 での動作とは異なり、必要に応じてマップに複数の InfoWindow オブジェクトを表示できるようになりました。

情報ウィンドウの位置を変更するには、情報ウィンドウで setPosition() を呼び出して位置を明示的に変更するか、InfoWindow.open() メソッドを使用して新しいマーカーにアタッチします。マーカーを渡さずに open() を呼び出すと、InfoWindow は、InfoWindow オプション オブジェクトを介して構築時に指定された位置を使用することに注意してください。

したがって、これらの提案に従うようにしてください。

于 2013-02-27T12:13:12.830 に答える
3

これは、一度に 1 つの情報ウィンドウのみを開くための私の解決策です。

infowindow = new google.maps.InfoWindow({
    content: infocontent,
    maxWidth: 200
});
google.maps.event.addListener(marker, 'click', function() {

    if($('.gm-style-iw').length) {
         $('.gm-style-iw').parent().hide();
    }
    infowindow.open(map,marker);
    
});
于 2014-01-17T14:25:44.440 に答える