2012-04-27 266 views
1

是否有可能必须使用两个按键,例如,它会累积每个按键的按下时间,例如左键和右键,所以每次点击其中一个键时他们会累积按下的时间,如果再次按下相同的按键,它会增加时间,因此最后每个按键都会按下总时间。计算按键在键盘上按下的时间长度

这怎么办?

+1

在什么语言?很难回答这种问题,但没有说明您使用的语言或环境。 – DangerMonkey 2012-04-27 17:07:35

回答

2

取决于平台上的相当多。但事件驱动的平台如果将事件关键和关键事件视为事件(大多数情况下包括.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]; 
    }; 
})(); 
+0

嗨,谢谢你的回答,请你看看这个,它是我在这个网站上发现的唯一一个,所以它应该是在相同的概念,除了我想获得每个关键的累计和总时间按下,所以你必须看到按下同一个按键时累计的时间,例如按键37显示按下了多长时间的总时间。请帮助http://jsfiddle.net/EeXVX/ – Nina 2012-04-27 17:25:04

+1

只需持续时间,并将其添加到该密钥的运行总数。像'totalTime [e.which] + =持续时间;'。 – cHao 2012-04-27 17:38:08

+0

你能否复制粘贴它给我,非常感谢var output = document.getElementById('output'), pressed = {}; window.onkeydown = function(e){ if(pressed [e.which])return; 按[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 +'was'for'+ duration +'seconds

'; 按[e.which] = 0; }; – Nina 2012-04-27 17:45:52

相关问题