簡體   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