1

我不知道该怎么办......infoBubbles如果我要打开一个新的,我只想关闭所有打开的。我正在使用以下代码。想法?我尝试了很多,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);              
    }
    });
4

2 回答 2

2

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

带有自定义标记的 InfoWindow 示例(同样的概念适用于 InfoBubble)

于 2012-08-11T01:46:08.247 回答
0

InfoBubble一个OverlayView. 据我所见,overlaycomplete添加叠加层时会发出一个事件。如果添加的叠加层与“this”不同,也许您所有的InfoBubbles 都可以收听该事件并关闭。

不过,这只是一个想法,我自己还没有尝试过。如果您尝试一下,我们将非常感谢您的反馈!

于 2012-08-11T00:54:25.003 回答