用來捕獲鍵盤輸入的keypress.js介紹

keypress.js是一個捕獲鍵盤輸入的JavaScript庫,它簡單易用,輕量級的壓縮版本只有9kB左右,而且沒有依賴其餘JavaScript庫。javascript

咱們一般用鍵盤事件來監聽keydown和keyup事件。當按下鍵盤的任意鍵的時候,keydown事件被觸發,放開該鍵時keyup事件被觸發。但有一些特殊位置的鍵盤符沒法自動觸發keyup事件,這時須要咱們手動監聽該事件。因此,就有了keypress.js用來監聽鍵盤事件。html

keypress.js的github地址以及項目主頁java

keypress.js的使用

首先在html頁面中引入impress.js文件:git

<script type="text/javascript" src="keypress.js"></script>

而後,實例化一個監聽器:github

var listener = new window.keypress.Listener();

接着,就能夠用這個監聽器監聽鍵盤事件了,咱們能夠經過調用keypress.js的API來實現對鍵盤事件的監聽。下面就介紹一下keypress.js都有哪些API。數組

.simple_combo

最簡單的監聽辦法就是使用使用simple_combo API
格式以下:函數

`simple_combo(keys, on_keydown_callback)`

它有兩個參數,第一個參數是指定的單個按鍵或者組合鍵,第二個參數是一個回調函數,它在每一次用戶按下指定的keyboard時被調用。例如:this

listener.simple_combo("ctrl c", function() {
        console.log("You pressed ctrl c");
    });

當用戶同時按下"ctrl c"時,函數纔會被調用。code

.counting_combo

用於對組合快捷鍵被按下的次數進行計數,格式以下:orm

counting_combo(keys, on_count_callback)

它也有兩個參數,不過第一個參數是兩個按鍵組合的快捷鍵,好比Ctrl c,Ctrl v等,第二個參數是一個回調函數,例如:

listener.counting_combo("shift s", function(e, count) {
console.log("You've pressed this " + count + " times.");});

count其實是shift一直按着的狀況下c被按下的次數。

.sequence_combo

用於註冊一個序列組合,
格式以下:

sequence_combo(keys, callback)

它也有兩個參數,第一個參數是用於描述的按鍵序列,另外一個參數是一個回調函數,當按鍵序列的按鍵都被按下時,這個函數纔會被調用。
例如:

listener.sequence_combo("up up down down left right left right b a enter", function() {
    lives = 30;
}, true);

.register_combo

若是想要使用有更高級的功能keypress事件,就可使用.register_combo API,格式以下:

register_combo(combo_dictionary)

它提供了許多可選的參數,下面是這些可選的參數以及它們的默認設置:

listener.register_combo({
    "keys"              : null,
    "on_keydown"        : null,
    "on_keyup"          : null,
    "on_release"        : null,
    "this"              : undefined,
    "prevent_default"   : false,
    "prevent_repeat"    : false,
    "is_unordered"      : false,
    "is_counting"       : false,
    "is_exclusive"      : false,
    "is_solitary"       : false,
    "is_sequence"       : false
});

.register_many

若是一次要註冊多個組合,爲了方便描述這些組合對象,能夠將它們所有放到一個數組中,格式以下:

register_many(combo_dictionary_array)

例如:

var my_scope = this;
var my_combos = listener.register_many([
    {
        "keys"          : "shift s",
        "is_exclusive"  : true,
        "on_keydown"    : function() {
            console.log("You pressed shift and s together.");
        },
        "on_keyup"      : function(e) {
            console.log("And now you've released one of the keys.");
        },
        "this"          : my_scope
    },
    {
        "keys"          : "s",
        "is_exclusive"  : true,
        "on_keyup"      : function(event) {
            // Normally because we have a keyup event handler,
            // event.preventDefault() would automatically be called.
            // But because we're returning true in this handler,
            // event.preventDefault() will not be called.
            return true
        },
        "this"          : my_scope
    }
]);

.unregister_combo

用於註銷全部的連擊或者指定按鍵組合,其格式以下:

unregister_combo(keys_or_combo_dictionary)

例如註銷全部的已經註冊的shift s組合:

listener.unregister_combo("shift s");

.unregister_many

格式以下:

unregister_many(array_of_keys_or_combo_dictionaries)

用於註銷大量的組合,從按鍵組成的數組中或者組合字典中註銷,例如:

listener.unregister_many(my_registered_combos);

.get_registered_combos()

用於得到監聽中全部註冊的組合。

listener.get_registered_combos()

.reset()

重置,用於清空全部註冊的組合。

`listener.reset()`

.stop_listening()

中止監聽,直到listen()再次被喚醒。
例如當咱們在輸入一個字段或者文本時就能夠這樣用:

$('input[type=text]')
    .bind("focus", function() { listener.stop_listening(); })
    .bind("blur", function() { listener.listen(); });

.destroy()

用於監聽結束後,摧毀這次監聽的全部記錄。

listener.destroy();

有不對的地方,還請多多指教~~

相關文章
相關標籤/搜索