Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算键盘上按键的按下时间_Javascript_Keyboard - Fatal编程技术网

Javascript 计算键盘上按键的按下时间

Javascript 计算键盘上按键的按下时间,javascript,keyboard,Javascript,Keyboard,例如,是否可能必须使用两个键,它将累积每个键的按下时间,例如左键和右键,因此每次单击其中一个键时,它将累积按下时间,如果再次按下同一个键,它将添加时间,以便在最后获得每个键的按下总时间 如何做到这一点?很大程度上取决于平台。但是,如果事件驱动平台将向下键和向上键视为事件(大多数都是这样,包括.net、java和Windows),那么它们就有点容易了 只需聆听按键关闭事件,并记录它发生的时间。当您为同一个键获得一个键启动事件时,只需从录制的时间中减去它发生的时间。两者之间的差异将是该按键的持续时间

例如,是否可能必须使用两个键,它将累积每个键的按下时间,例如左键和右键,因此每次单击其中一个键时,它将累积按下时间,如果再次按下同一个键,它将添加时间,以便在最后获得每个键的按下总时间


如何做到这一点?

很大程度上取决于平台。但是,如果事件驱动平台将向下键和向上键视为事件(大多数都是这样,包括.net、java和Windows),那么它们就有点容易了

只需聆听按键关闭事件,并记录它发生的时间。当您为同一个键获得一个键启动事件时,只需从录制的时间中减去它发生的时间。两者之间的差异将是该按键的持续时间

关键是,根据您的平台处理重复按键的方式,您可能会在获得一个按键之前,为同一个按键获得多个按键。只记录每个键的第一个键(当然,自最后一个键启动或应用程序启动后)。由于您一次可以按多个键,如果您想正确执行此操作,您将能够记住多个键的键关闭时间

如果您想跟踪总时间,则将在向上键上找到的时间差添加到该键的运行总时间中

在JS中:

(function() {
    var output = document.getElementById('output'),
        totalTime = {},
        pressed = {};

    window.onkeydown = function(e) {
        if (e.which in pressed) return;
        pressed[e.which] = e.timeStamp;
    };

    window.onkeyup = function(e) {
        if (!(e.which in pressed)) return;
        var duration = ( e.timeStamp - pressed[e.which] ) / 1000;
        if (!(e.which in totalTime)) totalTime[e.which] = 0;
        totalTime[e.which] += duration;
        output.innerHTML +=
            '<p>Key ' + e.which + ' was pressed for ' +
            duration + ' seconds this time' +
            '(' + totalTime[e.which] + ' total)</p>';
        delete pressed[e.which];
    };
})();
(函数(){
var output=document.getElementById('output'),
totalTime={},
按下={};
window.onkeydown=函数(e){
如果(如按下)返回;
按下[e.which]=e.timeStamp;
};
window.onkeyup=函数(e){
如果(!(e.按下哪个按钮))返回;
var duration=(e.timeStamp-按下[e.which])/1000;
如果(!(e.which in totalTime))totalTime[e.which]=0;
总时间[e.which]+=持续时间;
output.innerHTML+=
“键”+e.按下哪个+”+
持续时间+“本次为秒”+
“('+totalTime[e.which]+'total)

”; 删除按下的[e.which]; }; })();
使用哪种语言?这类问题很难在没有语言或环境指示的情况下回答。嗨,谢谢你的回答,请你看看这个,这是我在这个网站上找到的唯一一个,所以它应该是在同一个概念上,除了我想得到每个按键的累计时间和总时间,因此,当按下同一个键时,您必须看到累积的时间,例如,键37显示按下该键的总时间。请帮我记下
持续时间
,并将其添加到该密钥的运行总数中。比如
totalTime[e.which]+=duration。你能帮我复制并粘贴它吗,非常感谢var output=document.getElementById('output'),按={};window.onkeydown=函数(e){if(按下[e.which])返回;按下[e.which]=e.timeStamp;};window.onkeyup=function(e){if(!pressed[e.which])return;var duration=(e.timeStamp-pressed[e.which])/1000;output.innerHTML+='Key'+e.which+'被按下'+duration+'秒

';按下[e.which]=0;};非常感谢你的回答,我很感激。如果有人能把它做得更好一点,一个键只显示一行,这样会更整洁,而不是显示同一个键的列表