繁体   English   中英

按两个连续键以在JavaScript中触发事件

[英]press two continuous key to trigger an event in JavaScript

Vim ,你可以按gg转到文档的开头,或者按dd去删除当前行。 如何在网页中实现类似的行为? 我的意思是,在网页环境中,如何捕获两个连续的按键事件来触发事件?

谢谢。

您需要监控所有按键事件,当您找到可能是多按组合键中的第一个键时,启动计时器。 如果在计时器处于活动状态时按下组合中的第二个键,请执行某些操作。

例如(伪代码)

//for gg
var inCombo = false;
function KeyPress(Key) {
   if(Key=='g') {
      if(!inCombo) {
          inCombo = true;
          setTimeout('inCombo=false;', 100);
      } else {
          //Do the action here
      }
   }
}

//Do the action here ,只有在100毫秒内按g两次才会触发

你不能。 只需注册普通键事件并将键推送到阵列即可。

现在您可以调用一个检查命令的函数:

 // More or less pseudo code
 function deleteLine(){};
 function copyLine(){};      

 var commands = {'dd': deleteLine, 'yy': copyLine};    

 function onKeyPress(e) {
     keyList.push(e.key);

     // in this example keyList = ['d', 'y', 'i', 'd', 'd']
     var result = handleEvent();
 }

 function handleEvent(keyList) {
      // more pseudo code follows

      var cmds = commands.keyValue.sortByLengthDescending();
      for(var c in cmds) {

          // match the keys
          var ckey = c.split('');
          for(var i = keyList.length; i >= 0; i--) {
              if (keyList[i] !== ckey.shift()) {
                  break;
              }
              if (ckey.length === 0) {
                  return commands[c]();
              }
          }
      }
 }

这很简单,干净(取决于你如何写它)和可扩展,添加更多命令非常简单,当然你改变它,以便你可以将参数传递给命令功能等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM