![](/img/trans.png)
[英]JavaScript or jquery trigger left arrow key press event (Simulate arrow key press)
[英]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.