javascript – 如何获取有关按键的持续时间的信息?

所以,想象一下这段代码
if (navigator.appName == "Opera")
    document.onkeypress = function (e) { console.log(e.keyCode); };
else 
    document.onkeydown = function (e) { console.log(e.keyCode); };

我猜,它的作用非常明显.问题是,如果长时间按住键,它会被注册很多次.在我的应用程序中,这是一个问题,因为它使我的应用程序做了很多不必要的计算.有可能以某种方式只获得一次按键,但有关键持有多长时间的信息?

谢谢.

解决方法

干得好:
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 /”部分以查看演示代码)

因此,您可以使用按下的对象来监视当前正在按下哪些键以及按下它们的时间点(及时).

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...