2012-02-02 138 views
4

只是让我的牙齿陷入谷歌地图API。谷歌地图api多个标记与信息窗口

我试图在地图上绘制几个标记。完成。不过,我为每个标记回收一个变量/对象。

我最初创建带有选项的标记并添加到地图,然后采用相同的标记变量,重新调整它的用途,并将其添加到地图中。这确实产生了具有单独标题标签的两个独特标记。

我想为每个标记显示一个信息窗口,但是对于最好的方法是什么是疑问。我还看到一个麻烦的旗帜,弹出与每个标记分配点击事件,因为我使用相同的变量添加每个标记,我不知道如何将其单击事件添加到唯一标记(按名称,因为名称是两者相同的,因为它从来没有收到任何ID?)

var marker_obj = new google.maps.Marker({ 
    position: myLatlng, 
    title:"This is Marker 1", 
}); 

marker_obj.setMap(map); 

marker_obj = new google.maps.Marker({ 
    position: myLatlng, 
    title:"This is Marker 2", 
}); 

marker_obj.setMap(map); 

要创建信息窗口,我想用一个变量/对象,以保持信息窗口中,然后再利用其与每个标记新文本点击事件。

问题,我有是:

1:我应该使用一个单独的独特的可变/对象每个标记(开销?),如果没有,我怎么识别它的Click事件。

2:在弹出信息之前用新文本重新调整(重新分配)信息窗口对象是否正确,或者应该为每个标记创建一个唯一的信息窗口?

我有点Java的n00b,所以任何帮助将不胜感激。

回答

9

你说得对。就像你有一个标记对象一样,有一个infowindow对象。然后,infowindow的内容会根据您点击的标记而发生变化。有一点需要注意(如果你在循环中创建标记,这也会发生),是危险的是所有的infowindows都会以最后一个的内容结束。所以让我们创建一个新的函数来更新内容。另外,顺便说一句,您不必在标记对象上调用setMap()函数,只需在创建标记时传递的选项中指定map属性即可。

var infowindow = new google.maps.InfoWindow({ 
    content: '' 
}); 

var marker_obj = new google.maps.Marker({ 
    position: myLatlng, 
    title:"This is Marker 1", 
    map: map 
}); 

bindInfoWindow(marker_obj, map, infowindow, 'Marker 1'); 

marker_obj = new google.maps.Marker({ 
    position: myLatlng, 
    title:"This is Marker 2", 
    map: map 
}); 

bindInfoWindow(marker_obj, map, infowindow, 'Marker 2'); 

然后一个新的功能:

function bindInfoWindow(marker, map, infowindow, html) { 
    marker.addListener('click', function() { 
     infowindow.setContent(html); 
     infowindow.open(map, this); 
    }); 
} 
+0

嘿,感谢您的代码和解释。 代码打破了第二个标志....显示 首先一个,不是没有信息窗口,第二个标记不见了.. 如果我删除bindInfoWindow(marker_obj,地图,信息窗口,“标记1”) ;线,两个标记显示...任何想法? P.s.有没有一个很好的在线IDE或可以帮助我格式化我的Java代码块等? – 2012-02-02 13:01:18

+0

如果有任何问题,你可以看看有什么javascript错误吗? – duncan 2012-02-02 13:30:40

+0

infowindow未定义 [Break On This Error] \t bindInfoWindow(marker_obj,map,infowindow,'这是标记1的信息'); – 2012-02-02 13:38:59

2

创建全局信息窗口对象。 var infowindow = new google.maps.InfoWindow();

并为您的全局标记添加监听器。

google.maps.event.addListener(marker, "click", function (e) { 
      infowindow.setContent("set marker specific content here"); 
      infowindow .open(map, this); 
     }); 
+0

嗨,我加var var infowindow = new google.maps.infowindow();只是在我的地图obj decleration下面,但infowindow不是构造函数的错误 – 2012-02-02 13:39:40

+0

这是因为Javascript是区分大小写的,它应该是InfoWindow不是infowindow – duncan 2012-02-02 13:41:34

+0

谢谢大家,得到了第一个工作区,也会测试你的,谢谢。 – 2012-02-02 13:57:23

相关问题