如何获得有关按下该键多长时间的信息?

问题描述 投票:8回答:2

想象这个代码:

if (navigator.appName == "Opera")
    document.onkeypress = function (e) { console.log(e.keyCode); };
else 
    document.onkeydown = function (e) { console.log(e.keyCode); };

我想这很明显。问题是,如果您长时间持有该钥匙,它将被多次注册。在我的应用程序中,这是一个问题,因为它使我的应用程序执行了大量不必要的计算。是否可以以某种方式只获得一次keypress,但是具有有关该键被保持多长时间的信息?

javascript events dom-events keypress
2个回答
12
投票

您在这里:

var pressed = {};

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

window.onkeyup = function(e) {
    if ( !pressed[e.which] ) return;
    var duration = ( e.timeStamp - pressed[e.which] ) / 1000;
    // Key "e.which" was pressed for "duration" seconds
    pressed[e.which] = 0;
};

实时演示: http://jsfiddle.net/EeXVX/1/show/

(删除URL的“ show /”部分以查看演示代码)

因此,您拥有pressed对象,该对象监视当前正在按下的键以及在什么时间点(时间)被按下。

在keyup处理程序内部,您确定是否按下了键,如果是,则通过减去keyup / keydown事件的时间戳来计算持续时间。


2
投票

您是否尝试过类似的操作,

  1. onkeydown,删除keydown侦听器。
  2. onkeyup,再次附加keydown侦听器并计算时间?
© www.soinside.com 2019 - 2024. All rights reserved.