在Vim
中,可以按gg
去到文件的開頭,或者按dd
去刪除當前行。如何在網頁中實現類似的行爲?我的意思是,在網頁環境中,如何捕獲兩個連續的按鍵事件來觸發事件?按兩個連續鍵在JavaScript中觸發一個事件
謝謝。
在Vim
中,可以按gg
去到文件的開頭,或者按dd
去刪除當前行。如何在網頁中實現類似的行爲?我的意思是,在網頁環境中,如何捕獲兩個連續的按鍵事件來觸發事件?按兩個連續鍵在JavaScript中觸發一個事件
謝謝。
你不能兩次按下
如(僞)。只需註冊正常的按鍵事件並將按鍵按下即可。
現在你可以調用的檢查命令功能:
// 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]();
}
}
}
}
這很簡單,乾淨的(取決於你究竟是如何寫出來)和可擴展性,增加更多的指令是很容易的,你當然改變它,以便您可以傳遞參數到命令功能等
您需要監視所有按鍵事件,並且當您找到可能是多按組合中第一個按鍵時,啓動一個計時器。如果在定時器處於活動狀態時按下組合鍵中的第二個鍵,請執行一些操作。
//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內
+1我不知道爲什麼這個完整和優雅的解決方案沒有得到更多的選票 - 顯然我更喜歡我的定時方法,但這是一個非常好的,完全功能的例子。 – Basic 2010-12-18 23:58:20
嗯,我還沒有發佈「da full codez」,它可以立即將您獲得的最多票數減少1000倍;) – 2010-12-19 11:18:21