javascript - 检测键盘箭头键按下了多长时间?

标签 javascript jquery jquery-ui jquery-events

我知道如何通过这种方式检测 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,console,output

关于javascript - 检测键盘箭头键按下了多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39123472/

相关文章:

jquery - 从 jquery-ui 1.8.x 切换到 1.10.3 后, "tabs()"无法按预期工作......--是否有解决方法可以使 "tab key"再次工作?

接受多组参数的 JavaScript 函数

javascript - 在 React 组件之间使用 mui 图标

javascript - 自动隐藏可见子元素

javascript - 无法在 JS 中循环分组数组

javascript - 禁用选择 jQuery Datepicker 字段?

javascript - Ember Web 应用程序 - 显示 JSON 数据时出现问题 - 开放天气 map API

javascript - select2 通过 JavaScript 初始化

javascript - 有没有办法验证 Sizzle 选择器?

javascript - UI 中模态对话框的最佳方法