Keys由三个类时金字塔的Classes组成,从最小的单元(Key)开始到全局Document的事件管理器(Bindings)。
包括:key、combo、Bindings
这个Class管理键盘上单个物理按键的信息。可以使用key.a或key['Num Lock']引用给定的实例。理论上不需要手动创建Key的新实例,因为键盘上的所有键都已经定义了静态实例。
这个Class管理键盘上物理组合键信息。具体地说,一个任何类型的物理键,以及特殊按键(SHIFT、ALT、meta等)的任意组合。Combo是将keypress事件中按下的键与希望对其执行行为的组合中所需的键相匹配(由Bindings类管理)。
可以使用以下变量轻松创建组合:
// Single key
var combo = new Combo(Key.A);
// Single meta key
var combo = new Combo(Key.A, Key.CTRL);
// Multiple meta keys, constructor called as a variadic function
var combo = new Combo(Key.A, Key.CTRL, Key.SHIFT);
// Multiple meta keys passed as an array
var combo = new Combo(Key.A, [ Key.CTRL, Key.SHIFT ]);
这个class管理Action到组合的映射。如果找到一个匹配键的组合键,则按Event创建一个组合键,执行该组合和事件类型的任何处理程序(您可以为keydown/keyup使用不同的处理程序)。
注意:页面上只能有一个Bindings实例,否则将遇到重复/删除事件。
Bindings提供了一个简单的API,用于获取组合和绑定行为。首先,必须使用add创建keybinding:
var bindings = new Bindings();
// 典型的binding语法
bindings.add('displayAlert', new Combo(Key.A, Key.CTRL, Key.SHIFT));
bindings.add('toggle', new Combo(Key.S, Key.CTRL, Key.META));
// 一个事件绑定多个bindings
bindings.add('anotherEvent', new Combo(Key.D, Key.META), new Combo(Key.D, Key.SHIFT));
绑定添加行为Bingings.registerHandler. 您还可以为一个事件添加多个处理程序(例如,一个用于撤消逻辑的处理程序,一个用于执行实际操作的处理程序)。
var displayAlert = function() { alert('Hello!'); };
// Inferred binding name and eventType syntax
bindings.registerHandler(displayAlert);
// Inferred eventType syntax
bindings.registerHandler('displayAlert', function(ev) { alert('Hello!'); });
// Full syntax
bindings.registerHandler('displayAlert', 'keypress', function(ev) { alert('Hello!'); });
反向注册Bindings.unregisterHandler
.
// Unregister handler for a given name/function pair
bindings.unregisterHandler('displayAlert', displayAlert);
// Unregister handler for a specific event
bindings.unregisterHandler('keyup', 'displayAlert');
// Unregister all handlers with a given name
bindings.unregisterHandler('displayAlert');
If you have toggle-like behavior you'd like to implement, you are in luck! Register your toggle using registerToggle
:
可以非常方便的实现类似Toggle的行为,使用registerToggle注册您的切换:
var toggleOn = function() { console.log('Lights on!'); };
var toggleOff = function() { console.log('Lights off!'); };
bindings.registerToggle('toggle', toggleOn, toggleOff);
注意: Toggle从Off位置开始生效。