2010-12-18 138 views

回答

3

你不能兩次按下

如(僞)。只需註冊正常的按鍵事件並將按鍵按下即可。

現在你可以調用的檢查命令功能:

// 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](); 
       } 
      } 
     } 
} 

這很簡單,乾淨的(取決於你究竟是如何寫出來)和可擴展性,增加更多的指令是很容易的,你當然改變它,以便您可以傳遞參數到命令功能等

+0

+1我不知道爲什麼這個完整和優雅的解決方案沒有得到更多的選票 - 顯然我更喜歡我的定時方法,但這是一個非常好的,完全功能的例子。 – Basic 2010-12-18 23:58:20

+0

嗯,我還沒有發佈「da full codez」,它可以立即將您獲得的最多票數減少1000倍;) – 2010-12-19 11:18:21

5

您需要監視所有按鍵事件,並且當您找到可能是多按組合中第一個按鍵時,啓動一個計時器。如果在定時器處於活動狀態時按下組合鍵中的第二個鍵,請執行一些操作。

//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,只會火如果g是在100ms內

相關問題