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