如何检测普通js中keydowns之间的间隔

时间:2015-08-07 20:47:35

标签: javascript

我试图通过以下方法检测div上的keydowns之间的间隔:

window.onload = function() {
var p = document.getElementById('input');
    p.addEventListener('keydown', function() {

        if (document.querySelector('.rps')) {
            p.removeAttribute('class')
            clearInterval('me')
        }

        if (!document.querySelector('.rps')) {
            p.setAttribute('class', 'rps')
            var me = setInterval('interval()', 10)
        }

    }, false)

}
var z = 0;
function interval() {
    z += 1
document.getElementById('isp').innerHTML = z;
}

HTML:

测试

问题是,这会在第一次按键时启动interval(),但不会删除确定是启动还是结束rps所需的类setInterval

解决方案应该是普通的JS - 并且可以在多个按键上工作。

1 个答案:

答案 0 :(得分:2)

不要使用setInterval。那是每隔n毫秒做一些事情。

您只想在按下某个键时执行某些操作。

keydown事件处理程序绑定到环境(如果要限制它,则只绑定到您感兴趣的元素)。

在该处理程序中,创建一个new Date()并将其存储在本地变量中。

在来自外部的特定变量中,存在事件处理程序的范围:比较它们的时间。 (对于除第一个之外的每个keydown都会发生这种情况。)

将局部变量的值复制到更宽范围内的值的值。



function createHandler() {
  var last_keydown_time;
  
  function keydown_handler(event) {
    var this_keydown_time = new Date();
    if (last_keydown_time) {
      console.log(this_keydown_time - last_keydown_time);
    }
    last_keydown_time = this_keydown_time;
  }
  
  return keydown_handler;
}

addEventListener('keydown', createHandler());

<input />
&#13;
&#13;
&#13;