【问题标题】:Show only one InfoBubble in Google Maps API V3在 Google Maps API V3 中只显示一个 InfoBubble
【发布时间】:2012-07-19 07:23:12
【问题描述】:

我以前使用的是 InfoWindow。它正在工作,并且仅限于显示一个信息窗口,即使我单击了许多标记。

但是当我更改它并用 InfoBubble 替换它时,它会显示多个气泡。它不会自动关闭之前打开的气泡,而是保持打开状态,并且它们似乎把我的地图弄乱了。

我不知道如何处理这个问题。这是我的代码。

        downloadUrl("outputXML.php", function(data)
        {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++)
            {
                var name = markers[i].getAttribute("name");
                var address = markers[i].getAttribute("address");
                var type = markers[i].getAttribute("type");
                var point = new google.maps.LatLng(
                        parseFloat(markers[i].getAttribute("lat")),
                        parseFloat(markers[i].getAttribute("lng")));
                var html = "<div class='phoneytext'> <b>" + name + "</b> <br/>" + address + "</div>";
                var icon = customIcons[type] || {};
                var marker = new google.maps.Marker
                ({
                    map: map,
                    position: point,
                    icon: icon.icon,
                    title:name
                });

                //Initiate an infoBubble - shows when a marker is tapped/clicked
                infoBubble = new InfoBubble
                ({
                  map: map,
                  shadowStyle: 1,
                  padding: 0,
                  backgroundColor: 'rgb(57,57,57)',
                  borderRadius: 4,
                  arrowSize: 10,
                  borderWidth: 1,
                  borderColor: '#2c2c2c',
                  disableAutoPan: true,
                  arrowPosition: 30,
                  backgroundClassName: 'phoney',
                  arrowStyle: 2
                });                 
                bindInfoBubble(marker, map, infoBubble, html);

            }
       });               

        function bindInfoBubble(marker, map, infoBubble, html)
        {
            google.maps.event.addListener(marker, 'click', function()
            {
                infoBubble.setContent(html);
                infoBubble.open(map, marker);
            });
        }

【问题讨论】:

    标签: javascript google-maps-api-3 infobubble


    【解决方案1】:

    您可以实现Singleton 概念:

        downloadUrl("outputXML.php", function(data)
        {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++)
            {
                var name = markers[i].getAttribute("name");
                var address = markers[i].getAttribute("address");
                var type = markers[i].getAttribute("type");
                var point = new google.maps.LatLng(
                        parseFloat(markers[i].getAttribute("lat")),
                        parseFloat(markers[i].getAttribute("lng")));
                var html = "<div class='phoneytext'> <b>" + name + "</b> <br/>" + address + "</div>";
                var icon = customIcons[type] || {};
                var marker = new google.maps.Marker
                ({
                    map: map,
                    position: point,
                    icon: icon.icon,
                    title:name
                });
    
                bindInfoBubble(marker, map, html);
    
            }
        });  
    
        var InfoBubbleClass = (function(){
            var instance = null;
            return {
               getInstance:function(){
                   if(instance===null){
                       instance = new InfoBubble
                        ({
                           map: map,
                           shadowStyle: 1,
                           padding: 0,
                           backgroundColor: 'rgb(57,57,57)',
                           borderRadius: 4,
                           arrowSize: 10,
                           borderWidth: 1,
                           borderColor: '#2c2c2c',
                           disableAutoPan: true,
                           arrowPosition: 30,
                           backgroundClassName: 'phoney',
                           arrowStyle: 2
                        });                 
                   }
                   return instance;
               }
            };
        })();             
    
        function bindInfoBubble(marker, map, html)
        {
            google.maps.event.addListener(marker, 'click', function()
            {
                InfoBubbleClass.getInstance().setContent(html);
                InfoBubbleClass.getInstance().open(map, marker);
            });
        }
    

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 2010-12-24
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 2011-07-24
      • 2012-07-17
      • 2012-04-12
      相关资源
      最近更新 更多