打开新的时关闭打开InfoBubble(gMap v3)

时间:2012-08-10 22:50:33

标签: google-maps infobubble

我不知道该怎么做......我只想关闭所有打开的infoBubbles,如果我要打开一个新的。{1}}。我使用以下代码。想法?我试了很多并且google了很多但它应该不是那么复杂,不是吗?我想创建一个数组并为开放数据保存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);              
    }
    });

2 个答案:

答案 0 :(得分:2)

只打开一个infoBubble的最简单的方法是只有一个infoBubble,并根据点击的标记打开不同的内容。

InfoWindow example with custom markers (same concept applies to InfoBubble)

答案 1 :(得分:0)

InfoBubbleOverlayView。据我所知,添加叠加层时会发出overlaycomplete事件。也许你的所有InfoBubble都可以收听该事件,如果添加的叠加层与“this”不同,则关闭。

但这只是一个想法,我自己没有尝试过。如果您尝试一下,反馈表示赞赏!