我无法理解为什么setgeometry
事件中的mouseup
事件会在rightlick
事件后继续触发...即使我确实删除了setgeometry
事件侦听器
drawLayer.addListener('mouseup', function() {
changedGeom = drawLayer.addListener('setgeometry', function(e) {
console.log('got new geometry');
google.maps.event.removeListener(changedGeom);
});
});
drawLayer.addListener('rightclick', function(e) {
console.log('deleted polygon');
google.maps.event.removeListener(changedGeom);
});
我在setgeometry
内mouseup
的原因是因为我只想要多边形的最后位置。否则它将记录每一步。
也许我已经过度复杂了,但是这里有什么可以重现这个问题:
setgeometry
事件持续触发,导致大量获得新的几何消息。我不确定为什么会这样。有人可以解释一下吗?
答案 0 :(得分:0)
我已经弄清楚为什么会发生这种情况。
我删除了您的rightclick
侦听器,看到在右键单击操作时仍然触发了某个事件,然后我意识到这是因为左键单击和右键单击都会导致mouseup
事件。< / p>
因此,在您当前的实现中,将在rightclick
按下/事件中删除侦听器,但是由于mouseup
事件释放按钮后会立即创建一个新实例。
要解决此问题,您可以选择标准click
而不是mouseup
,但是,我还注意到当您拖动边界节点时此事件不会触发(这可能是您使用的原因)首先是mouseup
。
快速解决方法仍然是使用mouseup
事件,但会检测事件源自哪种类型的点击。
drawLayer.addListener('mouseup', function(e) {
if (e.which === 1) {
console.log("Left click");
} else if (e.which === 2) {
console.log("Middle click");
} else if (e.which === 3) {
console.log("Right click");
}
});