javascript - 如何在普通js中检测按键之间的间隔

标签 javascript

我尝试用以下方法检测 div 上按键之间的间隔:

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 格式 - 并且适用于多个按键。

最佳答案

不要使用setInterval。这是为了每 n 毫秒执行一些操作。

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

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

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

在事件处理程序范围之外的特定变量中存在:比较它们的时间。 (除了第一次之外的每次按键都会发生这种情况)。

将局部变量的值复制到更广泛范围内的变量值上。

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 />

关于javascript - 如何在普通js中检测按键之间的间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31886387/

相关文章:

javascript - 上传文件的同时您继续与网站交互

javascript - Gmap3 清晰的方向

javascript - Razor onchange 无法识别@variable

javascript - 订阅数据到来后如何正确运行方法?

javascript - JavaScript 中的构造函数参数

javascript - 如何使用 Nodejs 重定向到另一个页面,例如 google?

javascript - React Key 在不同元素上的唯一性

javascript - fabricjs 路径的边界框偏移量

javascript - 无法纠正错误 "Fail 1 - Table tag should have 3 rows and check with the requirements for CSS for table and tr"

javascript - $resource 删除功能没有按预期工作?