作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试 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));
};
额外归功于: geocodezip和 All infowindows have same data
可以在这里找到一个工作示例(我的应用程序):concert-dacote.com
关于javascript - 谷歌地图 Spiderfying 标记和添加监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197724/
leaflet:一个开源并且对移动端友好的交互式地图 JavaScript 库 中文文档: https://leafletjs.cn/reference.html 官网(英文): ht
我是一名优秀的程序员,十分优秀!