我试图通过以下方法检测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 - 并且可以在多个按键上工作。
答案 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;