Vim
には、gg
を押してドキュメントの先頭に移動するか、dd
を押して現在の行を削除します。どのようにWebページで同様の動作を実装するには?つまり、Webページ環境では、2つの連続したキープレスイベントをキャプチャしてイベントをトリガーするにはどうすればいいですか?2つの連続キーを押してJavaScriptでイベントをトリガーする
ありがとうございました。
Vim
には、gg
を押してドキュメントの先頭に移動するか、dd
を押して現在の行を削除します。どのようにWebページで同様の動作を実装するには?つまり、Webページ環境では、2つの連続したキープレスイベントをキャプチャしてイベントをトリガーするにはどうすればいいですか?2つの連続キーを押してJavaScriptでイベントをトリガーする
ありがとうございました。
以内に2回押した場合はできないでしょう。単に通常のキーイベントを登録し、キーを配列にプッシュするだけです。
今、あなたはコマンドをチェックする関数を呼び出すことができます。
// 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]();
}
}
}
}
これは、簡単なクリーン(あなたはそれを書く方法を正確に依存)と拡張性があり、より多くのコマンドを追加すると、あなたはもちろん、非常に簡単ですコマンド機能などにパラメータを渡すことができるように変更してください。
すべてのキープレスイベントを監視する必要があります。マルチプレスコンボの最初のキーである可能性のあるキーを見つけたら、タイマーを開始します。タイマーがアクティブな間にコンボの2番目のキーが押された場合は、何かしてください。
例えば(擬似コード)
//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
私は "da full codez"を投稿していません。 –