Google maps 打开一个新的(gMap v3)时关闭打开的InfoBubble

Google maps 打开一个新的(gMap v3)时关闭打开的InfoBubble,google-maps,infobubble,Google Maps,Infobubble,我不知道该怎么办。。。如果我要打开一个新的,我只想关闭所有打开的infoBubbles。我正在使用以下代码。思想?我试了很多次,用谷歌搜索了很多次,但不应该这么复杂,是吗?我本想创建一个数组并为打开的数组保存id,但我认为必须有另一种更简单的方法来解决这个问题 $(document).ready(function(){ createmap(); function createmap(lat,lng){ var latlng = new googl

我不知道该怎么办。。。如果我要打开一个新的,我只想关闭所有打开的
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);              
    }
    });
$(文档).ready(函数(){
createmap();
函数createmap(纬度、液化天然气){
var latlng=新的google.maps.latlng(50,10);
变量myOptions={
缩放:12,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
bounds=新的google.maps.LatLngBounds();
createMarker();
}
函数createMarker(){
var标记=[];
var cm=window.cm=new ClusterManager(
地图,
{
objClusterIcon:new google.maps.MarkerImage('images/map/flag_cluster.png',false,false,false,new google.maps.Size(20,20)),
objClusterImageSize:新的google.maps.Size(20,20)
}
);
var json=[];
var-x1=-85;
var x2=85;
变量y1=-180;
变量y2=180;

对于(var i=0;i而言,
InfoBubble
是一个
OverlayView
。就我所见,添加覆盖时会发出一个
overlaycomplete
事件。如果添加的覆盖与“this”不同,可能您所有的
InfoBubble
都可以侦听该事件并关闭


不过,这只是一个想法,我自己还没有尝试过。如果您尝试一下,我会很感激您的反馈!

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


这对我很有帮助!非常感谢。