【发布时间】:2013-06-16 08:53:20
【问题描述】:
我正在尝试蜘蛛化我的标记并向它们添加侦听器。 Spidefying 工作正常,这意味着我得到了重叠的标记,但问题是我似乎无法弄清楚如何将侦听器添加到这些标记。换句话说,我尝试了以下方法:
- 将
oms.addListener()放入循环中。这样一来,在单击标记时,会在同一个标记上打开所有infoWindows,这并不令人愉快。 - 将
oms.addListener()放在循环之外,就像 OMS Git 存储库中的示例一样。 https://github.com/jawj/OverlappingMarkerSpiderfier/blob/gh-pages/demo.html。这样,所有标记都具有相同的infoWindow,这是循环中的最后一个。
这是我的代码:
var iw = new google.maps.InfoWindow();
var oms = new OverlappingMarkerSpiderfier(carte, {keepSpiderfied:true});
oms.addListener('click', function(marker){
iw.setContent(content);
iw.open(carte, marker);
});
var markers =[];
var bounds = new google.maps.LatLngBounds();
if (response.length != 0) {
for (var i = 0 ; i < response.length; i++) {
var loc = new google.maps.LatLng(response[i].latlong[0], response[i].latlong[1]);
bounds.extend(loc);
var lemarqueur = new google.maps.Marker({
position: loc,
title: response[i].title
});
content = '<table><tr><td><img src="'
+response[i].image+'"/></td><td><p style="font-size: 13px">'
+response[i].title+'</p> <p style="font-size: 10px"><b>Artists:</b> '
+response[i].artist+'<br><b>Date:</b> '+response[i].startDate+'<br>'
+response[i].address.name +' '+response[i].address.street + '<br>'
+response[i].address.postalcode +', '+response[i].address.city +', '
+response[i].address.country
+'<br><a target="_blank" href ='
+response[i].url+'>More info</a></p></td></tr></table>';
oms.addMarker(lemarqueur);
markers.push(lemarqueur);
};
carte.fitBounds(bounds);
var markerCluster = new MarkerClusterer(carte, markers);
markerCluster.setMaxZoom(15);
markerCluster.setGridSize(40);
google.maps.event.addDomListener(window, 'load', initialiser);
所以我想知道我应该把addListener() 块放在哪里?
这是我之前在循环中使用的,使用google.maps.event.addListener(),效果很好:
google.maps.event.addListener(lemarqueur, 'click', function() {
InfoWindow.open(carte, lemarqueur);
});
我希望问题足够清楚,
提前致谢。
【问题讨论】:
-
这不是 Spiderifier 的问题,而是可以通过函数闭包(创建标记函数)轻松解决的问题。 stackoverflow.com/questions/4897316/… - stackoverflow.com/questions/3711700/…
-
@geocodezip - 实际上我的代码具有函数闭包,这意味着它类似于:
function createMarker(); for(){marker = createMarker;}。但是为了简单起见,我在这里粘贴了这样的内容,因为这里还有其他事情不在主题范围内。 -
@geocodezip - 如果你能提供一个 Spiderfying 示例,其中有一个函数闭包和循环一些 JSON 数据。那将非常感激。
-
这是一个example(但没有函数闭包)。
标签: javascript google-maps-api-3 listener google-maps-markers infowindow