Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Openlayer';s drawstart事件在付款人发生后多次触发_Javascript_Typescript_Openlayers - Fatal编程技术网

Javascript Openlayer';s drawstart事件在付款人发生后多次触发

Javascript Openlayer';s drawstart事件在付款人发生后多次触发,javascript,typescript,openlayers,Javascript,Typescript,Openlayers,我正在编辑OpenLayers团队提供的函数,但我面临一些问题。我添加了一个选项,当用户在drawstart事件期间右键单击时,删除最后添加的点,但在第一次绘制完成后,此选项会多次触发。如果我完成3个图形,此选项将触发3次,以此类推 我正在使用addEventListener('contextmenu')来触发右键单击事件,因此我尝试跟随并添加{once:true}选项,但这不起作用。我还尝试将此选项添加为侦听器,并在draund事件中使用删除侦听器,但这也不起作用 我就是不明白为什么会多次触发

我正在编辑OpenLayers团队提供的函数,但我面临一些问题。我添加了一个选项,当用户在
drawstart
事件期间右键单击时,删除最后添加的点,但在第一次绘制完成后,此选项会多次触发。如果我完成3个图形,此选项将触发3次,以此类推

我正在使用
addEventListener('contextmenu')
来触发右键单击事件,因此我尝试跟随并添加
{once:true}
选项,但这不起作用。我还尝试将此选项添加为侦听器,并在
draund
事件中使用删除侦听器,但这也不起作用

我就是不明白为什么会多次触发
drawstart
事件

我的代码

let侦听器;
draw.on('drawstart',(evt)=>{
//定格素描
草图=evt.特征;
让tooltipCoord=evt.coordinate;
listener=sketch.getGeometry().on('change',(evt)=>{
设geom=evt.target;
让输出;
if(多边形的几何实例){
输出=格式化区域(geom);
tooltipCoord=geom.getInteriorPoint().getCoordinates();
}else if(线串的几何实例){
输出=格式长度(geom);
tooltipCoord=geom.getLastCoordinate();
}
measureToolTipeElement.innerHTML=输出;
MEASURETOLTIP.setPosition(工具指针);
});
//用鼠标右键单击删除最后一个向量
this.map.getViewport().addEventListener('contextmenu',(evt)=>{
log(“右键单击”);
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就是映射,并且在绘图结束时总是触发抽屉(考虑在不触发抽屉的情况下取消绘图)

这两个假设都是正确的。
unByKey()
的实现方式与度量示例所示相同,在
draund
事件中,侦听器被创建为:
listener2=this.map.getViewport()…
。你的建议很有效,非常感谢。