计算键盘中按键的时间长度

时间:2012-04-27 17:04:26

标签: javascript keyboard

是否可以使用两个键,例如它会累计按下每个键的时间,例如键LEFT和RIGHT,所以每次点击其中一个时它会累积按下的时间因为,如果再次按相同的键,它将添加时间,所以在最后你按下每个键的总时间。

如何做到这一点?

1 个答案:

答案 0 :(得分:2)

取决于平台上的相当多。但事件驱动的平台有点容易,如果他们将关键和键入视为事件(大多数事情,包括.net,java和Windows)。

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

Catch是,根据您的平台处理密钥重复的方式,您可能会在获得密钥之前获得相同密钥的多个按键。只跟踪每个键的第一个(自上次键入或应用程序启动以来)。由于您可以一次按多个键,如果您想要正确执行此操作,您将能够记住多个键的关键时间。

如果您想跟踪总时间,请计算您在加密时找到的时差,并将其添加到该键的运行总计中。

在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];
    };
})();