我想我遇到了一个非常奇怪的(对我来说)情况。我有一个" keyup"绑定到div的事件(当然设置为tabindex
),其中包含Google Map。基本上我需要在按下shiftKey
时禁用地图拖动功能,并在按键启动时再次启用它:
mapElement.setAttribute("tabindex", 0);
mapElement.focus();
google.maps.event.addDomListener(mapElement, "mouseover", function(e) {
mapElement.focus();
});
google.maps.event.addDomListener(mapElement, "mouseout", function(e) {
mapElement.blur();
});
google.maps.event.addDomListener(mapElement, "keydown", function(e) {
var isShift;
if (window.event) {
isShift = !!window.event.shiftKey;
}
else {
isShift = !!e.shiftKey;
}
if (isShift) {
map.setOptions({ draggable: false });
}
});
现在,为了做到这一点,我添加了一个keyup
事件,如下所示:
google.maps.event.addDomListener(mapElement, "keyup", function(e) {
var isShift;
console.log(e);
if (window.event) {
isShift = !!window.event.shiftKey;
}
else {
isShift = !!e.shiftKey;
}
if (!isShift) {
map.setOptions({ draggable: true });
}
});
但如果按顺序执行以下步骤,则不会触发此事件:
1)在鼠标结束时按下shift键地图(mouseover
)(此处禁用地图拖动);
2)按住shift键的同时,按下鼠标左键并将光标移动到地图上;
3)在按下左按钮的同时在地图上移动光标时,突然释放班次key
(此时一直按下) - > 在这里我希望我设置的keyup
事件被触发,地图再次变为可拖动,但它不是...... ;
只有当我第一次释放鼠标左键然后时,我才能正常工作。我将shift
键抬起。当然,我的解决方法是添加一个" mousemove"事件,像这样:
google.maps.event.addDomListener(mapElement, "mousemove", function(e) {
if (!e.shiftKey) {
map.setOptions({ draggable: true });
}
});
但在JS事件处理方面,有人能比我更专业的人告诉我这里发生了什么以及为什么keyup
没有被解雇?
感谢您的关注!