我正在编辑OpenLayers团队提供的测量功能,但我遇到了一些问题。我添加了一个选项,当用户在drawstart
事件期间右键单击时删除最后添加的点,但是在第一次绘制完成后,此选项会多次触发。如果我完成 3 张图纸,此选项将触发 3 次,依此类推。
我正在使用addEventListener('contextmenu')
来触发右键单击事件,所以我尝试遵循此建议并添加一个{once: true}
选项,但这不起作用。我还尝试将此选项添加为侦听器,并在drawend
事件中使用unByKey()
删除侦听器,但这也没有奏效。
我只是不明白为什么drawstart
事件被多次触发。
我的代码
let listener;
draw.on('drawstart', (evt) => {
// set sketch
sketch = evt.feature;
let tooltipCoord = evt.coordinate;
listener = sketch.getGeometry().on('change', (evt) => {
let geom = evt.target;
let output;
if (geom instanceof Polygon) {
output = formatArea(geom);
tooltipCoord = geom.getInteriorPoint().getCoordinates();
} else if (geom instanceof LineString) {
output = formatLength(geom);
tooltipCoord = geom.getLastCoordinate();
}
measureTooltipElement.innerHTML = output;
measureTooltip.setPosition(tooltipCoord);
});
// Remove last vector with right click
this.map.getViewport().addEventListener('contextmenu', (evt) => {
console.log("right clicked");
evt.preventDefault();
draw.removeLastPoint()
});
});
你是如何实现你的unByKey((的? 应该可以做这样的事情:
function detectRightclick() {
console.log("right clicked");
evt.preventDefault();
draw.removeLastPoint()
}
然后,在绘图开始时:
this.map.getViewport().addEventListener('contextmenu', detectRightclick)
并且,在抽屉上:
this.map.getViewport().removeEventListener('contextmenu', detectRightclick)
这是假设this.map是地图,并且您总是在绘制结束时触发绘图(考虑取消绘图而不触发绘图(