Leaflet - 在标记点击时从json获取数据,而不是弹出窗口

时间:2017-11-25 11:13:21

标签: javascript leaflet

标题不是最好的解释。我正在创建一个啤酒风味图(不涉及地图图块),每个标记使用每个啤酒瓶的自定义图标。到目前为止一切都很好。

screenshot of the current build

我在地图外面有一个div,我希望在点击每个标记时显示用于图标的相同的png(但更大)......

for (var i=0; i < markers.length; ++i )
{
var IconVar = L.icon({
  iconUrl: markers[i].bottleurl,
  shadowUrl: 'images/beer-shadow.png',
  iconSize: [36, 120],
  shadowSize:  [74, 50],
  iconAnchor: [16, 60],
  shadowAnchor: [35, -26],
  popupAnchor: [0, -65]
})        

var bigbottleUrl = markers[i].bottleurl;

 L.marker( [markers[i].lat, markers[i].lng], {icon: IconVar}, )
  .bindPopup( 'Text and some custom content bla bla', customOptions )
  .on('click', function(e){document.getElementById("bigbottle").src = bigbottleUrl;}).addTo( beermap ); 
}

哪个适用于某一点,但默认为从json文件设置的最后一个标记。也许我不能从循环内部调用不同的变量,或者我没有设置我的循环权限。

我在这里查看了很多问题,并尝试使用e.popup._sourcethis.option使其具体化,并使用_leaflet_id使其具体化,但我的推动远远超出了我的理解的javascript!

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在走了几个死路之后,这就是解决方案。

var imgUrl;

document.addEventListener('DOMContentLoaded', function() {
   document.addEventListener('click', function(event) {
      if (event.target.className == 'leaflet-marker-icon leaflet-zoom-animated leaflet-interactive') {
      var imgSrc = event.target.src; 
      var imgFile = imgSrc.substring(imgSrc.lastIndexOf('/')+1); 
      imgUrl = 'images/' + imgFile;
      document.getElementById("bigbottle").src = imgUrl;
      }
   });
});

可能有一些冗余代码,但这是最有效的方法,不是将onClick事件放在所有内容上,或者有一个我不知道如何构建的复杂变量!