html – 使用MarkerClusterer在Marker上的InfoWindow

发布时间:2019-12-08 整理:脚本之家
脚本之家收集整理的这篇文章主要介绍了html – 使用MarkerClusterer在Marker上的InfoWindow脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随脚本之家小编过来看看吧!
这是我的HTML代码.我试着在标记上添加一个infowindow,但它不想工作.我的数据是从“Alle_Ortswahlen.page1.xml”文件加载的.
有谁知道如何将infoWindow添加到每个标记?
<script type="text/javascript">
  google.load('maps','3',{
    other_params: 'sensor=false'
  });
  google.setOnLoadCallback(initialize);
function initialize() {

  var stack = [];

  var center = new google.maps.LatLng(48.136,11.586);
    var options = {
        'zoom': 5,'center': center,'mapTypeId': google.maps.MapTypeId.ROADMAP
    };
  var map = new google.maps.Map(document.getElementById("map_canvas"),options);
  GDownloadUrl("Alle_Ortswahlen.page1.xml",function(doc) {
    var xmlDoc = GXml.parse(doc);
    var markers = xmlDoc.documentElement.getElementsByTagName("ROW");
    for (var i = 0; i < markers.length; i++) {
      // obtain the attribues of each marker
      var lat = parseFloat(markers[i].getAttribute("Field4"));
      var lng = parseFloat(markers[i].getAttribute("Field6"));
      var marker = new google.maps.Marker({
            position : new google.maps.LatLng(lat,lng),map: map,title:"This is a marker"
        });     
      stack.push(marker);
    }
    var mc = new MarkerClusterer(map,stack);
  });
}
</script>

解决方法

在for循环之前,创建一个空的infowindow对象.
var infowindow = new google.maps.InfoWindow();

比在for循环中,在标记之后添加一个事件监听器,如下所示:

google.maps.event.addListener(marker,'click',(function(marker,i) {
                return function() {
                    infowindow.setContent("You might put some content here from your XML");
                    infowindow.open(map,marker);
                }
            })(marker,i));

将回调参数传递给addListener方法时会发生一些关闭魔法.如果您不熟悉它,请看这里:

Mozilla Dev Center: Working with Closures

所以,你的代码应该是这样的:

google.load('maps',{
            other_params: 'sensor=false'
        });

        google.setOnLoadCallback(initialize);

        function initialize() {

            var stack = [];

            var center = new google.maps.LatLng(48.136,11.586);
            var options = {
                'zoom': 5,'mapTypeId': google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("map_canvas"),options);
            var infowindow = new google.maps.InfoWindow();
            GDownloadUrl("Alle_Ortswahlen.page1.xml",function(doc) {
                var xmlDoc = GXml.parse(doc);
                var markers = xmlDoc.documentElement.getElementsByTagName("ROW");
                for (var i = 0; i < markers.length; i++) {
                    // obtain the attribues of each marker
                    var lat = parseFloat(markers[i].getAttribute("Field4"));
                    var lng = parseFloat(markers[i].getAttribute("Field6"));
                    var marker = new google.maps.Marker({
                        position : new google.maps.LatLng(lat,title:"This is a marker"
                    });     
                    google.maps.event.addListener(marker,i) {
                        return function() {
                            infowindow.setContent("You might put some content here from your XML");
                            infowindow.open(map,marker);
                        }
                    })(marker,i));
                    stack.push(marker);
                }
                var mc = new MarkerClusterer(map,stack);
            });
        }

总结

以上是脚本之家为你收集整理的html – 使用MarkerClusterer在Marker上的InfoWindow全部内容,希望文章能够帮你解决html – 使用MarkerClusterer在Marker上的InfoWindow所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入脚本之家官方QQ群:1065694478
脚本之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!