如何检测Shift键是否已释放?

3

当松开 shift 键时,我希望能够运行一个函数。

我知道可以使用类似以下代码来检测 shift 键:

$(window).bind("keydown keyup", function(ev) { ... });

它非常适用于检测键盘组合键(例如shift+a)。问题是,如果您想要检测shift键本身,则会触发一个keydown事件,其ev.shiftKey=falseev.which=16,以及一个keyup事件,其ev.shiftKey=trueev.which=16。我尝试在keyup上附加此组合的事件,但当按下两个shift键时,它会以非常微妙的方式失败:对于第二个shift键,您将同时获得true,16keyup/keydown,然后在释放第一个shift键时,您会再次获得一个true,16keyup。是否有任何简洁的方法来解决这个问题?或者我应该忽略两个shift键的情况?

2
是的,处理这个问题的明显方法是在按下Shift键时增加一个变量,在释放Shift键时减少它。除非该变量等于零,否则可以假设Shift键被按下。话虽如此,尽管实现这个解决方案并不是很困难,但我不明白为什么有人会同时按下两个Shift键。 - brymck
1个回答

1

有人同时按下两个SHIFT键的可能性很小,除非他们有意尝试破坏您的应用程序。当99%的用户在这种情况下永远不会按下两个键时,您无法设计(阅读浪费时间)编码边缘情况。

您确定按键的逻辑是正确的。设置一个变量并根据按键按下增加/减少它,如果它等于0,则表示没有按下任何键。Presto bammo。

编辑:或者只需按照Brian在他的评论中所说的做即可!:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接