Javascript 在调整窗口大小时是否可以监听keydown和keyup

Javascript 在调整窗口大小时是否可以监听keydown和keyup,javascript,jquery,keypress,jquery-events,window-resize,Javascript,Jquery,Keypress,Jquery Events,Window Resize,我试图在调整窗口大小时检测keydown和keydup。到目前为止,我所尝试的只是在调整大小完成后触发关键事件 $(window).resize(function(){ console.log("resizing"); }); $(window).keydown(function(e){ $("#key").css("background","green"); }); $(window).keyup(function(e){ $("#key").css("ba

我试图在调整窗口大小时检测
keydown
keydup
。到目前为止,我所尝试的只是在调整大小完成后触发关键事件

$(window).resize(function(){
    console.log("resizing");    
});

$(window).keydown(function(e){
    $("#key").css("background","green");
});

$(window).keyup(function(e){
    $("#key").css("background","red");
});

好的,您可能会遇到的部分问题是,按键不是打开或关闭的东西,而是持续开火的东西。
onresize
也是如此

当您调整窗口大小时,事件会被反复调用。
此外,由于JS不是多线程的,因此一次只能发生其中一个事件。 另一个事件将排队,以便在另一个事件完成后立即运行

因此,您实际需要的是一个状态机,一个事件设置,另一个事件检查

快速示例:

var BrowserWindow = { width : 0, height : 0, prevWidth : 0, prevHeight : 0 };

window.onresize = function (e) {
   /* set prevWidth/prevHeight, get new width/height */
};

window.onkeydown = function (e) {
    if (BrowserWindow.prevWidth !== BrowserWindow.width) { /*...*/ }
};
这是可行的(除了只有当屏幕被主动拉伸时它才会起作用……因此,在按键向下且窗口边缘被按住但未被拖动的情况下不会发生这种情况(如果浏览器触发按键向下事件的频率高于调整大小的频率,则可能会导致闪烁)

更恰当的答案可能是相反的:

var Keyboard = {
    currentKeys : {},
    previousKeys : {}
};


window.onkeydown = function (e) { Keyboard.currentKeys[e.keyCode] = true; };
window.onkeyup   = function (e) { delete Keyboard.currentKeys[e.keyCode]; };


window.onresize = function (e) {
    var key = <X>,
        state = "";

    state = Keyboard.currentKeys[key] && !Keyboard.previousKeys[key]
          ?    "pressed"
          : !Keyboard.currentKeys[key] && Keyboard.previousKeys[key]
          ?    "released"
          : Keyboard.currentKeys[key] && Keyboard.previousKeys[key]
          ?    "held"
          :    "off";

    Keyboard.previousKeys = Keyboard.currentKeys;
    doSomething(state);
};
var键盘={
currentKeys:{},
以前的密钥:{}
};
window.onkeydown=函数(e){Keyboard.currentKeys[e.keyCode]=true;};
window.onkeyup=函数(e){删除键盘.currentKeys[e.keyCode];};
window.onresize=函数(e){
变量键=,
state=“”;
状态=键盘.currentKeys[键]&!键盘.previousKeys[键]
?“按下”
:!Keyboard.currentKeys[键]&&Keyboard.previousKeys[键]
“释放”
:键盘。当前键[键]&键盘。上一个键[键]
“持有”
:“关”;
Keyboard.previousKeys=Keyboard.currentKeys;
剂量测定(国家);
};

从架构的角度来看,这还不够完美,但更符合您在另一个环境中必须做什么的想法。

似乎适合我(在Chrome中)-Hm.为什么在调整大小时需要键入内容?@bfavaretto-同时它在IE9中不起作用。假设这取决于浏览器如何将事件传递给JS,并且无法更改。@FAngel我不需要键入任何内容,我只需要在resizing@bfavaretto镀铬(和金丝雀色)在Mac电脑上,它在你调整大小之前不会启动。