检测键盘箭头键被按了多长时间
Detect how long the keyboard arrow key has been pressed?
我知道如何在Javascript中通过这种方式检测按下的键:
$(document).keydown(function(e) {
switch(e.which) {
case 37: // left
break;
case 38: // up
break;
case 39: // right
break;
case 40: // down
break;
default: return; // exit this handler for other keys
}
e.preventDefault(); // prevent the default action (scroll / move caret)
});
我想知道是否有可能我们可以检测箭头键被按了多长时间,只是为了我需要处理的滚动功能
捕捉keydown
事件,keyup
事件的启动定时器和停止定时器
(function() {
var PRESSING = false;
var timer;
$(document).keydown(function(e) {
//Ignore repeated event to be fired.
//otherwise it will reset timer.
if(e.which === 38 && PRESSING) {
return e.preventDefault();
}
//Start timer
timer = Date.now();
console.log("Key press");
PRESSING = true;
});
$(document).keyup(function(e) {
//On arrow key up, stop timer and log result
if(e.which === 38) {
PRESSING = false;
var time = Date.now() - timer;
console.log("Key pressed for " + time/1000+ "sec");
}
e.preventDefault();
})
}());
例如http://jsbin.com/vowabiqelu/edit?js、控制台、输出
据我所知,如果您正在制作滚动功能,您应该开始滚动keydown
并停止keyup
。keyup事件可以在keydown事件中设置。
提供一个jsfiddle,我可以帮你。
var pressed = null;
$(element).on('keydown', function(event) {
pressed = +new Date();
// do whatever else you need upon key down
});
$(element).on('keyup', function(event) {
var duration = +new Date() - pressed;
pressed = null;
// do whatever you need to do based on the duration of the press
});
相关文章:
- 为什么我的上下文选择器和.buttonset()在ie中花费了这么长时间
- 谷歌地图需要很长时间才能在ie11中渲染
- 有没有一种方法可以检查javascript以毫秒为单位执行一个函数需要多长时间
- 我一直收到的控制台警告是什么?推迟长时间运行的计时器任务以提高滚动的流畅性
- 为什么这个代码不起作用?我花了很长时间试图弄清楚这一点
- 如何在长时间执行JavaScript期间显示微调器
- 长时间轮询:每个浏览器中的通知
- 完整日历:如何支持一次点击和不长时间点击
- 如何使用 javascript 停止对 asp.net 进行正在进行的回发(长时间运行的执行)
- 为什么这个 AJAX 调用需要这么长时间
- 为什么这个正则表达式需要这么长时间才能执行
- 如何修复长时间运行的脚本
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- javascript秒表限制最长时间
- 长时间运行的脚本IE与Chrome/Firefox
- 有没有一种方法可以在长时间运行的JavaScript操作之前强制回流
- 我的无引用 JavaScript 对象存在在哪里以及存在多长时间
- 为什么chromecast在动画帧之间需要这么长时间
- 输入焦点关闭键盘,需要长时间触摸
- 检测键盘箭头键被按了多长时间