是否可以计算同时按下的键数?我走得很远,但是当我离开浏览器窗口时,我会遇到一些不必要的行为。如果我在远离浏览器窗口时按住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;
});
答案 0 :(得分:3)
试试这个(更新):
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;
}
});
});
新的工作;)链接: FIDDLE
答案 1 :(得分:2)
解决问题的一个简单方法是清除用户离开标签时按下的键。您可以像这样使用window.onblur
事件:
window.onblur = function () {
numKeys = [];
};
请注意,此解决方案无法识别您在其他窗口中按下的键。 (例如,在另一个窗口中按“向上”,然后再次选择此窗口)
答案 2 :(得分:0)
让我们保持简单。想法是在keys
上将对象为event.keyCode
的{{1}}设置为true,并在keydown
上删除。然后计算keyup
中true
的实例,
keys
答案 3 :(得分:0)
我决定在上面的评论中分享前几分钟提到和链接的片段。但是,为了说清楚,我发现很难通过键盘同时按下/接受超过四个,也许五个键,这就是为什么所有这些尝试都可能没用:)
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