javascript – 在Safari中检测命令按键
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在Safari中检测命令按键,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2155字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 在Safari中检测命令按键](/upload/InfoBanner/zyjiaocheng/791/4dcba465da98491db1c5f6b5b68c13c0.jpg)
我正试图拦截Safari中的命令按键.我添加了一个事件处理程序,如下所示:
document.onkeypress = handleKeyPress;
function handleKeyPress(event) {
if ("+" === String.fromCharCode(event.charCode) && event.metaKey) {
// my code here
return false;
}
return true;
}
当我按命令shift =(shift =在我的美国键盘上)时,if语句不返回true.
如果我删除if语句的event.metaKey部分并命中shift =,则if语句确实返回true.
此外,如果我将匹配的字符串从“”更改为“=”并命中command =(有或没有shift键),if语句确实返回true.
有没有办法实际检测命令按键(不假设键是shift =并检查event.shiftKey,因为对于某些非美国键盘不是这样)?
解决方法:
首先,我不一定建议使用?作为快捷方式,因为它已经在Safari中意味着什么(即缩放页面).有人可能希望它仍能正常工作.根据您正在构建的内容,它可能有意义,但除非您确定,否则不要覆盖默认快捷方式.
无论如何:Key events are tricky,通常是因为keyCode / charCode /哪些属性并不总是与正确的字母匹配,所以String.fromCharCode并不总能为您提供正确的字符串. keyIdentifier有时候看起来更好,但并不总是如此(例如,它的字母键代码总是大写字母).
我过去所做的(我不确定这是最好的方法,但它确实可行),而是监听keydown和keyup事件,以及“堆栈”修饰键.即每当按下一个键时,检查它是否是一个修饰键(即它是否为cmd,ctrl,alt或shift).如果是,则将其添加到修改器的“堆栈”中.在密钥上做相反的事情;如果释放的键是修饰符,则将其从堆栈中删除.
现在,回到keydown-handler,如果键不是修饰键,你可以发送keydown事件(与keypress事件不同,它将具有一个非常可靠的keyIdentifier属性来检查),以及修改器的堆栈对于其他一些回调,那就是从那里拿走它.
在您的情况下,这样的回调将检查cmd-key是否在堆栈中,并且keydown事件的keyIdentifier是“U 002B”(这是unicode代码).
我正在谈论的I’ve put together a jsfiddle example.如果单击“结果”窗格(以确保它具有焦点),然后按?,它应??显示您使用的组合键,并写入“成功!”下面.否则,它只会显示关键组合.在我的键盘上,可以直接访问加号,因此我看到的关键组合只是“?”.但是如果你需要转换来输入一个加号,你应该看到“??”.
它是一个通用的代码片段,适用于处理Safari / Mac中的键盘快捷键,因此您可以根据需要进行构建.您将需要添加一些事件侦听器来重置模糊事件等上的修改器堆栈.理想情况下,当您释放密钥时,修改器堆栈会自动重置,但由于某些东西可能导致浏览器或观察到的元素/窗口/文档失去焦点,因此无法处理密钥事件,并且已释放的密钥已赢得不要从堆栈中删除.所以检查模糊事件.
内容总结
以上是互联网集市为您收集整理的javascript – 在Safari中检测命令按键全部内容,希望文章能够帮你解决javascript – 在Safari中检测命令按键所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。