Leaflet:将点击事件添加到群集图标
Leaflet: add click event to clustered icons
我想向传单地图上的(随后)集群图标添加一个点击事件(使用 Leaflet.markercluster 插件)。该事件本身有效,但警报总是为每个被单击的图标生成数组的最后一个元素。我不明白原因。将 'marker' 声明为数组并没有改变结果。
map.clearLayers;
var marker = [];
var markers = L.markerClusterGroup({
disableClusteringAtZoom: 10,
spiderfyOnMaxZoom: true,
chunkedLoading: true
});
for (id in reclist) {
var posn = reclist[id]['info'][1];
var pose = reclist[id]['info'][2];
var title = reclist[id]['info'][0];
var mapicon = L.icon({iconUrl: 'url of icon');
marker[id] = new L.marker(new L.LatLng(posn, pose), {icon: mapicon})
.on('click', function(){alert(title)});
markers.addLayer(marker[id]);
}
map.addLayer(markers);
有专门的活动:请参阅 documentation
markers.on('clusterclick', function() {});
请注意,这是您的集群的一个事件。所以它没有在你的循环中定义。
var markers = L.markerClusterGroup({ ... });
markers.on('clusterclick', function() { ... });
for (id in reclist) { ... }
以防我误解了你的问题,而你想为每个标记定义一个点击事件:如果你想显示标题,你不能像你那样使用变量。应该这样做:
var title = reclist[id]['info'][0];
var marker = new L.marker(new L.LatLng(posn, pose), {icon: mapicon});
marker.title = title;
marker.on('click', function(e){alert(e.target.title)});
这是一个example
我想向传单地图上的(随后)集群图标添加一个点击事件(使用 Leaflet.markercluster 插件)。该事件本身有效,但警报总是为每个被单击的图标生成数组的最后一个元素。我不明白原因。将 'marker' 声明为数组并没有改变结果。
map.clearLayers;
var marker = [];
var markers = L.markerClusterGroup({
disableClusteringAtZoom: 10,
spiderfyOnMaxZoom: true,
chunkedLoading: true
});
for (id in reclist) {
var posn = reclist[id]['info'][1];
var pose = reclist[id]['info'][2];
var title = reclist[id]['info'][0];
var mapicon = L.icon({iconUrl: 'url of icon');
marker[id] = new L.marker(new L.LatLng(posn, pose), {icon: mapicon})
.on('click', function(){alert(title)});
markers.addLayer(marker[id]);
}
map.addLayer(markers);
有专门的活动:请参阅 documentation
markers.on('clusterclick', function() {});
请注意,这是您的集群的一个事件。所以它没有在你的循环中定义。
var markers = L.markerClusterGroup({ ... });
markers.on('clusterclick', function() { ... });
for (id in reclist) { ... }
以防我误解了你的问题,而你想为每个标记定义一个点击事件:如果你想显示标题,你不能像你那样使用变量。应该这样做:
var title = reclist[id]['info'][0];
var marker = new L.marker(new L.LatLng(posn, pose), {icon: mapicon});
marker.title = title;
marker.on('click', function(e){alert(e.target.title)});
这是一个example