手动触发事件时填充e.layer

时间:2017-05-18 16:57:32

标签: events leaflet

我正在使用L.vectorGrid.protobuf图层(名为pbfLayer)来显示矢量图块,我希望按pbfLayer.fileEvent('click', {latlng: <some coordinate>})触发点击事件。但是,如果以这种方式,事件参数e将只有属性latlngtargettype,而如果通过鼠标单击手动触发它将包含更多属性,包括{ {1}}。

实施例: https://jsfiddle.net/ziyuang/dfekwzhd/

每次触发点击事件时,控制台都会打印事件参数layer。控制台输出的屏幕截图如下所示,如果我首先通过单击然后通过编程手动触发事件,使用相同的坐标:

demo-points

有没有办法找到并填充e的其他属性,以便e完全可以模仿点击?谢谢。

更新1 https://jsfiddle.net/ziyuang/dfekwzhd/4/):

我试过了@ IvanSanchez的prosthetic-hand,但仍然无法正常工作。添加的代码是

fireEvent

手动点击将创建一个&#34; Rambaut Lake&#34;但是我没有在页面上看到任何弹出窗口。

更新2 :我终于使用happen完成了这项工作。 就我而言,我必须

var crs = L.CRS.EPSG3857;
var rambaut_lake_latlng = L.latLng(40.99842740667731,-74.16458129882814);
var rambaut_lake_point = crs.latLngToPoint(rambaut_lake_latlng , map.getZoom());
var southwest_point = crs.latLngToPoint(map.getBounds()._southWest, map.getZoom());
var x = rambaut_lake_point.x - southwest_point.x;
var y = map.getSize().y - (southwest_point.y - rambaut_lake_point.y);
console.log([x, y])

var hand = new Hand();
var finger = hand.growFinger('mouse');
finger.moveTo(x, y, 0).down().up();

var canvas = document.elementFromPoint(left, top); $(canvas).happen({type: 'click', clientX: left, clientY: top}); $('#map').happen({type: 'click', clientX: left, clientY: top})找不到j {{{}} {{}}}。

1 个答案:

答案 0 :(得分:2)

如果你想“完全模仿点击”,那么你应该在DOM中create and dispatch a synthetic click event。这就是像happenprosthetic-hand这样的库。

以这种方式调度的事件将触发Leaflet的事件处理逻辑,就像事件是真实事件一样。

相关问题