在 Google 地图上监听键盘事件
Listen keyboard events on Google Map
我的应用程序中有 Google 地图,我使用地图在其上绘制折线。我想在 Google 地图上监听键盘事件,这样说如果我在绘制 Polyline 时按下 Esc 键,它应该停止绘制(它应该重置 DrawingMode)。
我通过两种方式尝试了这个。
1. 我在它的容器中添加了keyevents :
bindKeyEventsForMapButtons : function(btn){
var me = this;
btn.el.dom.onkeydown = function (e) {
if(btn.getId() == 'drawPerimeterGoogleMap'){
if(btn.pressed==true)
btn.toggle(false);
}else if(btn.getId() == 'removeAllPerimeter'){
btn.setPressed(false);
}
}
}
在这种情况下,当我单击地图时会触发事件。但是当我在地图上绘图时不是。
通过向地图本身添加事件
google.maps.event.addListener(me.map, 'keydown', function () {
alert('in keydown');
});
这永远不会被解雇。`
而且我不想在 window 或整个文档上收听关键事件,因为我在文档
中也有其他组件
有什么帮助吗?谢谢
您需要注册一个 DOM 事件侦听器 addDomListener
并在 drawingManager
上调用 setDrawingMode(null)
。
google.maps.event.addDomListener(document, 'keyup', function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code === 27) {
drawingManager.setDrawingMode(null);
}
});
下面是一个工作演示。希望这会有所帮助。
编辑:
我意识到虽然这适用于矩形,但它似乎不适用于多边形,因为将绘图模式设置为空实际上完成了叠加。在这种情况下,除了上述之外,您还需要跟踪叠加层(在 overlaycomplete
事件中)并在多边形本身上调用 setMap(null)
。
var polygon;
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {
polygon = e.overlay;
});
google.maps.event.addDomListener(document, 'keyup', function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code === 27) {
drawingManager.setDrawingMode(null);
polygon.setMap(null);
}
});
我的应用程序中有 Google 地图,我使用地图在其上绘制折线。我想在 Google 地图上监听键盘事件,这样说如果我在绘制 Polyline 时按下 Esc 键,它应该停止绘制(它应该重置 DrawingMode)。 我通过两种方式尝试了这个。 1. 我在它的容器中添加了keyevents :
bindKeyEventsForMapButtons : function(btn){
var me = this;
btn.el.dom.onkeydown = function (e) {
if(btn.getId() == 'drawPerimeterGoogleMap'){
if(btn.pressed==true)
btn.toggle(false);
}else if(btn.getId() == 'removeAllPerimeter'){
btn.setPressed(false);
}
}
}
在这种情况下,当我单击地图时会触发事件。但是当我在地图上绘图时不是。
通过向地图本身添加事件
google.maps.event.addListener(me.map, 'keydown', function () { alert('in keydown'); });
这永远不会被解雇。`
而且我不想在 window 或整个文档上收听关键事件,因为我在文档
中也有其他组件有什么帮助吗?谢谢
您需要注册一个 DOM 事件侦听器 addDomListener
并在 drawingManager
上调用 setDrawingMode(null)
。
google.maps.event.addDomListener(document, 'keyup', function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code === 27) {
drawingManager.setDrawingMode(null);
}
});
下面是一个工作演示。希望这会有所帮助。
编辑:
我意识到虽然这适用于矩形,但它似乎不适用于多边形,因为将绘图模式设置为空实际上完成了叠加。在这种情况下,除了上述之外,您还需要跟踪叠加层(在 overlaycomplete
事件中)并在多边形本身上调用 setMap(null)
。
var polygon;
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {
polygon = e.overlay;
});
google.maps.event.addDomListener(document, 'keyup', function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code === 27) {
drawingManager.setDrawingMode(null);
polygon.setMap(null);
}
});