【问题标题】:Calculate how long a key is pressed in a keyboard计算在键盘上按下一个键的时间
【发布时间】:2014-02-03 03:56:21
【问题描述】:

是否有可能必须使用两个键,例如,它会累积每个键的按下时间,例如键 LEFT 和 RIGHT,因此每次单击其中一个键时,它都会累积按下的时间因为,如果你再次按下同一个键,它会添加时间,所以最后你会得到每个键按下的总时间。

如何做到这一点?

【问题讨论】:

  • 用什么语言?如果没有说明您使用的语言或环境,很难回答这类问题。

标签: javascript keyboard


【解决方案1】:

很大程度上取决于平台。但是,如果事件驱动平台将 key-down 和 key-up 视为事件(大多数都这样做,包括 .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];
    };
})();

【讨论】:

  • 嗨,谢谢你的回答,你能看看这个吗,这是我在这个网站上找到的唯一一个,所以除了我想得到一个之外,它应该是相同的概念每个按键的累计时间和总时间,所以你必须看到按下同一个按键时的累计时间,例如按键 37 显示它被按下的总时间。请帮助jsfiddle.net/EeXVX
  • 只需将duration 添加到该密钥的运行总数中即可。喜欢totalTime[e.which] += duration;
  • 能否请您为我复制并粘贴它,非常感谢 var output = document.getElementById('output'), press = {}; window.onkeydown = function(e) { if (pressed[e.which] ) return;按下[e.which] = e.timeStamp; }; window.onkeyup = function(e) { if ( !pressed[e.which] ) return; var 持续时间 = ( e.timeStamp - press[e.which] ) / 1000; output.innerHTML += '

    Key ' + e.which + ' 被按下了 ' + duration + ' 秒

    ';按下[e.which] = 0; };
  • 非常感谢您的回答,我很感激。如果有人可以让它变得更好一点,并且一个键只显示一行,那么它会更整洁,而不是显示相同键的列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2021-04-18
  • 1970-01-01
  • 2021-01-21
  • 2021-04-21
  • 2016-04-18
相关资源
最近更新 更多