Dan*_*ore 82 javascript keyboard input
有没有办法检测JavaScript当前是否存在关键字?
我知道"keydown"事件,但这不是我需要的.按键后一段时间,我希望能够检测到它是否仍然按下.
PS最大的问题似乎是,在一段时间后,密钥开始重复,启动keydown和keyup事件,如恶魔.希望只有一个简单的isKeyDown(key)函数,但如果没有,则需要克服/解决这个问题.
Dev*_*ode 124
除了使用keyup
和keydown
听众进行跟踪,当是关键将降低,备份,有是实际上一些属性告诉你,如果某些键下降.
window.onmousemove = function (e) {
if (!e) e = window.event;
if (e.shiftKey) {/*shift is down*/}
if (e.altKey) {/*alt is down*/}
if (e.ctrlKey) {/*ctrl is down*/}
if (e.metaKey) {/*cmd is down*/}
}
Run Code Online (Sandbox Code Playgroud)
这是适用于所有浏览器生成的事件对象,如从keydown
,keyup
和keypress
,这样你就不必使用鼠标移动.
我尝试使用document.createEvent('KeyboardEvent')
和生成我自己的事件对象document.createEvent('KeyboardEvent')
并寻找e.shiftKey
等等,但我没有运气.
我在Mac上使用Chrome 17
bob*_*nce 64
有没有办法检测JavaScript当前是否存在关键字?
不.唯一的可能就是监控每个keyup
与keydown
和记忆.
一段时间后,密钥开始重复,启动keydown和keyup事件,如恶魔.
它不应该.你肯定会keypress
重复,在许多浏览器中你也会重复keydown
,但如果keyup
重复,这是一个错误.
不幸的是,它不是一个完全闻所未闻的错误:在Linux,Chromium和Firefox上(当它在GTK +下运行时,它在流行的发行版中,如Ubuntu)都会为持有的密钥生成重复的keyup-keypress-keydown序列,这是不可能区别于真正快速锤击钥匙的人.
小智 38
我的解决方案
var keys = {};
window.onkeyup = function(e) { keys[e.keyCode] = false; }
window.onkeydown = function(e) { keys[e.keyCode] = true; }
Run Code Online (Sandbox Code Playgroud)
我现在可以检查是否在脚本中的任何其他位置按下了任何键
keys["code of the key"]
Run Code Online (Sandbox Code Playgroud)
如果是,则按下该键.
Fal*_*tar 11
我不相信有任何像isKeyDown函数,但你可以编写自己的函数.
基本上,创建一个数组,其长度是您要监视的键数.然后使用documents/pages/controls keyUp和keyDown事件,使用该键的状态更新数组.
然后编写一个函数来检查某个键是否关闭并返回一个bool.
var keyEnum = { W_Key:0, A_Key:1, S_Key:2, D_Key:3 };
var keyArray = new Array(4);
function onKeyDown()
{
// Detect which key was pressed
if( key == 'w' )
keyArray[keyEnum.W_Key] = true;
// Repeat for each key you care about...
}
function onKeyUp()
{
// Detect which key was released
if( key == 'w' )
keyArray[keyEnum.W_Key] = false;
// Repeat for each key you care about...
}
function isKeyDown(key)
{
return keyArray[key];
}
Run Code Online (Sandbox Code Playgroud)
那应该完成你想要的.
在这里结束是为了检查浏览器是否已经内置了一些东西,但似乎没有。这是我的解决方案(与罗伯特的回答非常相似):
"use strict";
const is_key_down = (() => {
const state = {};
window.addEventListener('keyup', (e) => state[e.key] = false);
window.addEventListener('keydown', (e) => state[e.key] = true);
return (key) => state.hasOwnProperty(key) && state[key] || false;
})();
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用 来检查是否按下了某个键is_key_down('ArrowLeft')
。
归档时间: |
|
查看次数: |
100719 次 |
最近记录: |