1

どうしたらいいのかわからない…infoBubbles新しいものを開くなら、開いているものを全部閉じたい。私は次のコードを使用しています。アイデア?私はたくさん試し、ググってみましたが、それほど複雑ではないはずですよね?開いている配列の配列を作成してIDを保存することを考えましたが、これを修正するための別の非常に簡単な方法が必要だと思います。

$(document).ready(function(){
            createmap();

    function createmap(lat,lng){
        var latlng = new google.maps.LatLng(50, 10);
    var myOptions = {
    zoom: 12,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
    bounds = new google.maps.LatLngBounds();
            createMarker();
    }

    function createMarker(){
            var markers = [];
            var cm = window.cm = new ClusterManager(
                map,
                {
                    objClusterIcon: new google.maps.MarkerImage('images/map/flag_cluster.png', false, false, false, new google.maps.Size(20,20)),
                    objClusterImageSize: new google.maps.Size(20,20)
                }
            );

            var json = [];
            var x1 = -85;
            var x2 = 85;
            var y1 = -180;
            var y2 = 180;
            for (var i=0; i<20; ++i) {
                json.push(
                    '{'+
                        '"longitude":'+(x1+(Math.random()*(x2-x1)))+','+
                        '"latitude":'+(y1+(Math.random()*(y2-y1)))+','+

                        '"title":"test"'+
                    '}'
                );
            }
            json = '['+json.join()+']';
            // eval is ok here.
            eval('json = eval(json);');

            infos = [];
            $.each(json, function(i,item){      
    var contentString = '<div id="content"><a onclick="createdetailpage('+i+');">'+item.title+'<br /></a></div>';

                console.log(item.latitude);
                var myLatlng = new google.maps.LatLng(item.latitude,item.longitude);
            var marker = new google.maps.Marker({
                    position: myLatlng, 
                    //map: map, 
                    flat: true,
                    title:item.title,
                    //animation: google.maps.Animation.DROP,
                    //icon: myIcon
                });  
                var infoBubble = new InfoBubble({               
                    content: '<div class="phoneytext">'+contentString+'</div>'
                });                                

                google.maps.event.addListener(marker, 'click', function() {
                    if (!infoBubble.isOpen()) {
                        infoBubble.open(map, marker);
                    }
                }); 
                cm.addMarker(marker, new google.maps.Size(50, 50));                 
            });
        map.fitBounds(bounds);              
    }
    });
4

2 に答える 2

2

infoBubbleを1つだけ開く最も簡単な方法は、infoBubbleを1つだけ持って、クリックしたマーカーに応じて異なる内容で開くことです。

カスタムマーカーを使用したInfoWindowの例(同じ概念がInfoBubbleに適用されます)

于 2012-08-11T01:46:08.247 に答える
0

InfoBubbleですOverlayView。私が見る限りoverlaycomplete、オーバーレイが追加されるとイベントが発生します。InfoBubble追加されたオーバーレイが「これ」とは異なる場合、おそらくすべての s がそのイベントをリッスンして閉じることができます。

あくまでも想像ですが、自分では試していません。試してみたら、フィードバックをお待ちしております。

于 2012-08-11T00:54:25.003 に答える