[英]Count how many keys are pressed at the same time in JavaScript
是否可以计算同时按下多少个键? 我已经走得很远了,但是在离开浏览器窗口时跳出了一些不需要的行为。 如果在离开浏览器窗口时按住x键数量,然后在其他窗口中释放键,则当我回到浏览器窗口时numKeys数组保持不变。 也许您可以检查返回浏览器窗口时按下了多少键?
到目前为止,我的代码:
var numKeys = [];
$(document).keydown(function(e){
if(numKeys.indexOf(e.keyCode) == -1){
numKeys.push(e.keyCode);
}
document.getElementById('test').innerHTML = numKeys.length;
});
$(document).keyup(function(e){
if(numKeys.indexOf(e.keyCode) > -1){
var index = numKeys.indexOf(e.keyCode);
if(index > -1){ numKeys.splice(index, 1); }
}
document.getElementById('test').innerHTML = numKeys.length;
});
试试这个(更新):
var cpt = 0;
var codes = "";
$(function () {
$(document).keydown(function (e) {
if (codes.indexOf(";" + e.keyCode + ";") == -1) {
cpt++;
codes += ";" + e.keyCode + ";";
}
});
$(document).keyup(function (e) {
var tmp = ";" + e.keyCode + ";";
if (codes.indexOf(tmp) != -1) {
cpt--;
var part1 = codes.substring(0,codes.indexOf(tmp));
var part2 = codes.substring(codes.indexOf(tmp)+tmp.length );
codes=part1+part2;
}
});
});
新的Working;)链接: FIDDLE
一个简单的解决方案是清除用户离开选项卡时按下的键。 您可以像这样使用window.onblur
事件:
window.onblur = function () {
numKeys = [];
};
请注意,此解决方案将无法识别您在另一个窗口中按的键。 (例如,您在另一个窗口中按“向上”,然后再次选择此窗口)
让我们保持非常简单。 想法是在keydown
时将对象为event.keyCode
的keys
设置为true,在keyup
将其删除。 然后计算keys
中true
的实例,
var keys = [];
$(function () {
$(document).keydown(function (event) {
keys[event.keyCode] = true;
var count = 0;
for (var i = 0; i < keys.length; i++) {
if (keys[i]) count++;
}
console.log(count);
});
$(document).keyup(function (e) {
delete keys[e.keyCode];
});
});
我决定分享我的摘录,并在几分钟前链接到上面的评论中。 但是,为了清楚起见,我发现很难同时按下/接受超过四个,也许五个键的键盘,这就是为什么所有这些尝试都可能没有用的原因:)
window.onload = function(){
var a = [];
var log = document.getElementById("keys");
document.body.onkeydown = function(event){
var keyCode = ('which' in event) ? event.which : event.keyCode;
if(a.indexOf(keyCode) == -1) a.push(keyCode);
log.innerHTML = a.length + " | " + a.join();
return false;
};
document.body.onkeyup = function(event){
a = [];
log.innerHTML = a.join();
};
};
工作jsBin
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.