gpt4 book ai didi

javascript - 谷歌地图 Spiderfying 标记和添加监听器

转载 作者:行者123 更新时间:2023-11-30 10:30:30 27 4
gpt4 key购买 nike

我正在尝试 Spiderfy 我的标记并向它们添加监听器。 Spidefying 工作正常,这意味着我得到了重叠的标记 spiderfied 但问题是我似乎无法弄清楚如何向这些标记添加监听器。换句话说,我尝试了以下方法:

  • oms.addListener() 放入循环中。这样一来,点击一个标记就会打开同一个标记上的所有 infoWindow,这并不令人愉快。
  • 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() block 放在哪里?

这是我之前在循环中使用的,使用 google.maps.event.addListener(),效果很好:

google.maps.event.addListener(lemarqueur, 'click', function() {
InfoWindow.open(carte, lemarqueur);
});

我希望问题足够清楚,
提前致谢。

最佳答案

oms.addListener() 的行为方式与 google.maps.event.addListener() 不同。所以我通过在 for 中使用原始的 google.maps.event.addListener() 而不是 oms.addListener() > 循环。像这样:

var infoWindows = [];

function closeInfoWindows(){
var i = infoWindows.length;
while(i--){
infoWindows[i].close();
}
}

function newMarker(map, response, oms){
var loc = new google.maps.LatLng(response.latlong[0], response.latlong[1]);
var marker = new google.maps.Marker({
position: loc,
title: response.title
});
oms.addMarker(marker);
var WindowOptions = { content:'some desc...'};
var InfoWindow = new google.maps.InfoWindow(WindowOptions);
infoWindows.push(InfoWindow);
google.maps.event.addListener(marker, 'click', function() {
closeInfoWindows();
InfoWindow.open(carte, marker); // or this instead of marker
});
return marker;
}


for (var i = 0 ; i < response.length; i++) {
markers.push(newMarker(map, response[i], oms));
};

额外归功于: geocodezipAll infowindows have same data

可以在这里找到一个工作示例(我的应用程序):concert-dacote.com

关于javascript - 谷歌地图 Spiderfying 标记和添加监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com