如何向现有 JavaScript 函数添加键盘快捷键?
这是我的代码:
function pauseSound() {
var pauseSound = document.getElementById("backgroundMusic");
pauseSound.pause();
}
我想为此代码添加一个键盘快捷键,如何才能做到这一点,以便单击按钮时也可以执行该功能?
尝试添加 else if 语句,但它不起作用,有什么想法吗?
function doc_keyUp(e) {
if (e.ctrlKey && e.keyCode == 88) {
pauseSound();
}
else if (e.ctrlKey && e.keyCode == 84) {
playSound();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
处理
document
上的keyup
事件。请注意,
KeyboardEvent.keyCode
为 已弃用。假设问题代码的意思是通过物理位置检查按键,KeyboardEvent.code
是现在执行此操作的正确方法。Handle the
keyup
event on thedocument
.Note that
KeyboardEvent.keyCode
was deprecated. Assuming the question code means to check keys by physical location,KeyboardEvent.code
is the proper way to do so now.如果您想在按键后触发事件,请尝试:
在此示例中按 ALT+a:
这是一个小提琴:https://jsfiddle.net/dmtf6n27/38/
另请注意,无论您是否使用
onkeypress 或
onkeyup
。 W3 Schools 的“KeyboardEvent keyCode”属性了解更多信息。If you want to trigger an event after pressing a key, try:
In this example press ALT+a:
Here is a fiddle: https://jsfiddle.net/dmtf6n27/38/
Please also note there is a difference for the keycode numbers, whether you are using
onkeypress
oronkeyup
. W3 Schools' "KeyboardEvent keyCode" Property has more information.这是我的解决方案:
currentKeys
的数组;这些是当时按下的键。onkeydown
检测到按下某个键,它就会被添加到currentKeys
数组中。onkeyup
检测到按键被释放时,数组将被重置,这意味着此时没有按键被按下。Here's my solution:
currentKeys
; these are the keys that will are being held down at that moment.onkeydown
, it is added to thecurrentKeys
array.onkeyup
, the array is reset meaning that no keys are being pressed at that moment.这对我有用
This worked for me
捕获关键代码,然后调用您的函数。此示例捕获 ESC 键并调用您的函数:
您需要 JQUERY 对于这个例子。
Catch the key code and then call your function. This example catches the ESC key and calls your function:
You'll need JQUERY for this example.
这些似乎都使用已弃用的
keyCode
和which
属性。以下是使用 jQuery 连接事件的未弃用版本:注意:Ctrl+t 可能已被指定用于打开新的浏览器选项卡。
These appear to all be using the deprecated
keyCode
andwhich
properties. Here is a non-deprecated version using jQuery to wire up the event:Note: Ctrl+t may already be assigned to opening a new browser tab.
如果您愿意,这里有一些可以使用的东西。您可以用它注册一堆密钥和处理程序。
注释位于代码中,但简而言之,它在
document
上设置了一个侦听器,并使用您想要侦听的按键组合来管理哈希。它没有经过严格测试,但似乎工作正常。
看看 Javascript 字符代码(Key Codes)找到很多keyCodes可以使用,
Here's some stuff to use if you want. You can register a bunch of keys and handler with it.
Comments are in the code, but in short it sets up a listener on the
document
and manages a hash with the key combinations for which you want to listen.It is not terribly tested, but seemed to work OK.
Look at Javascript Char Codes (Key Codes) to find a lot of keyCodes to use,
解决方案:
解释:
我遇到了同样的问题并提出了自己的解决方案。
e.metaKey
似乎不适用于 Chrome 和 Safari 中的 keyup 事件。但是,我不确定它是否特定于我的应用程序,因为我有其他算法阻止了一些关键事件,并且我可能错误地阻止了元键。该算法监视按下的按键,然后将它们添加到当前按下的按键列表中。释放后,该密钥将从列表中删除。使用
indexOf
查找数组中的键代码,检查列表中是否有同时出现的键。Solution:
Explanation:
I ran into this same problem and came up with my own solution.
e.metaKey
didn't seem to work with the keyup event in Chrome and Safari. However, I'm not sure if it was specific to my application since I had other algorithms blocking some key events and I may have mistakenly blocked the meta key.This algorithm monitors for keys going down and then adds them to a list of keys that are currently being pressed. When released, the key is removed from the list. Check for simultaneous keys in the list by using
indexOf
to find key codes in the array.在 React 中使用
ctrl+s
保存Saving with
ctrl+s
in React其中许多答案建议强制覆盖
document.onkeypress
。这不是一个好的做法,因为它只允许分配单个事件处理程序。如果之前由另一个脚本设置了任何其他处理程序,它们将被您的函数替换。如果您稍后分配另一个处理程序,它将替换您在此处分配的处理程序。更好的方法是使用
addEventListener
附加您的键盘快捷键。这允许您根据需要附加尽可能多的处理程序,并且不会干扰任何可能已附加自己的外部库。此外,
UIEvent.which
< /a> 属性从未标准化,不应使用。KeyboardEvent.keyCode
也是如此。当前用于检查按下哪个键的符合标准属性是KeyboardEvent.key
。在可用值的完整列表。为了获得最佳性能,如果您需要修饰键 未被按下。同样,不要使用多个
keypress
事件监听器,而是使用一个带有 swtich/case 语句对您要处理的每个键做出适当的反应。另外,不要忘记使用 取消密钥的默认行为如有必要,
Event.preventDefault
。不过,有一些快捷键无法覆盖 就像ctrl+w
。Many of these answers suggest forcibly overriding
document.onkeypress
. This is not a good practice because it only allows for a single event handler to be assigned. If any other handlers were previously set up by another script they will be replaced by your function. If you assign another handler later, it will replace the one you assigned here.A much better approach is to use
addEventListener
to attach your keyboard shortcut. This allows you to attach as many handlers as necessary and will not interfere with any external libraries that may have attached their own.Additionally, the
UIEvent.which
property was never standardized and should not be used. The same goes forKeyboardEvent.keyCode
. The current standards compliant property you should use to check which key was pressed isKeyboardEvent.key
. Find the key you want in the full list of available values.For best performance, return early if your desired modifier key is not pressed. As well, rather than having multiple
keypress
event listeners, use a single one with a swtich/case statement to react appropriately to each key that you want to handle.Also, do not forget to cancel the default behavior of the key with
Event.preventDefault
if necessary. Though, there are some shortcuts that you cannot override likectrl+w
.这适用于
Ctrl + Shift + L
This works for
Ctrl + Shift + L