我正在使用L.vectorGrid.protobuf
图层(名为pbfLayer
)来显示矢量图块,我希望按pbfLayer.fileEvent('click', {latlng: <some coordinate>})
触发点击事件。但是,如果以这种方式,事件参数e
将只有属性latlng
,target
和type
,而如果通过鼠标单击手动触发它将包含更多属性,包括{ {1}}。
实施例: https://jsfiddle.net/ziyuang/dfekwzhd/
每次触发点击事件时,控制台都会打印事件参数layer
。控制台输出的屏幕截图如下所示,如果我首先通过单击然后通过编程手动触发事件,使用相同的坐标:
有没有办法找到并填充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 {{{}} {{}}}。
答案 0 :(得分:2)
如果你想“完全模仿点击”,那么你应该在DOM中create and dispatch a synthetic click
event。这就是像happen
和prosthetic-hand
这样的库。
以这种方式调度的事件将触发Leaflet的事件处理逻辑,就像事件是真实事件一样。