单击使用传单更改标记图标


20

我有一张地图上有很多(> 100)标记。我想这样做,以便单击这些将图标更改为突出显示的版本。我创建了两个自定义图标,一个是常规图标,另一个是突出显示的图标。我已经将其与单个标记一起使用,但是找不到任何设置方法,因此可以通过单击来更改每个图标。

这是一个图标的工作代码:

var testmarker = L.marker([44.0, -73.0], {icon: unselectedIcon});

testmarker.on('click', function(e) {
  testmarker.setIcon(selectedIcon);
});

但是我有很多标记,并使用for循环放置它们:

//points is a 2 dim array with lat/long pairs
for (i = 0; i <= points.length-1; i++) {
    var marker = L.marker([points[i][0], points[i][1]], {icon: unselectedIcon});    
}

marker.on('click', function(e) {
  marker.setIcon(selectedIcon);
});

我尝试通过使用数组为每个标记赋予唯一的变量名称:

for (i = 0; i <= points.length-1; i++) {
    testmarker[i] = L.marker([points[i][0], points[i][1]], {icon: unselectedIcon}); 
    testmarker[i].on('click', function(e) {
alert(e.latlng); e.setIcon(selectedIcon); 
}); 
}

这只是让我在警报中“未定义”。

更改testmarker[i].onthis.map.on只会在单击地图时发出警报(不更改图标)。

将整个行更改为:

testmarker[i].on('click', function(e) {
alert(e.latlng); testmarker[i].setIcon(selectedIcon);
});

更改最后一个(单击任何一个时),同时还给出未定义的警报。

如何设置标记,以便单击即可单独更改每个标记,但每个标记不使用数百个重复的代码块?

Answers:


16

我最终解决了这个问题。我还发现您可以添加任意选项,以后再访问它们。这对于为标记分配唯一的ID很有用:

for (i = 0; i <= points.length-1; i++) {
    testmarker[i] = L.marker([points[i][0], points[i][1]], {icon: unselectedIcon, id: i}); 
    testmarker[i].on('click', function(e) {
        e.target.setIcon(selectedIcon);
        document.getElementById('someDiv').innerHTML = points[e.target.options.id][2];
}); 
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.