Openlayer 的绘制开始事件在绘制发生后多次触发



我正在编辑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是地图,并且您总是在绘制结束时触发绘图(考虑取消绘图而不触发绘图(

相关内容

  • 没有找到相关文章

最新更新