我有以下代码,用于在Angular中捕获按键操作:$broadcast
$document.bind('keypress', function(event) {
var key = event.which;
$rootScope.$broadcast('keypress', event);
$rootScope.$broadcast('keypress:' + key, event);
});
我用$on
进行监听。
然而,我想要检测当两个按键同时按下时,比如同时按下enter
和s
(不是一个接着一个的组合)。
最好的方法是什么?
编辑
我的想法是这样的:
var keys = [];
$document.bind('keydown', function(event) {
keys[event.which] = true;
});
$document.bind('keyup', function(event) {
delete keys[event.which];
});
$document.bind('keypress', function(event) {
var key = event.which;
var keysPressed = [];
angular.forEach(keys, function(value, key) {
keysPressed += 'keypress:' + key;
});
$rootScope.$broadcast('keypress', event);
$rootScope.$broadcast(keysPressed, event);
});
如果我有多个按键,则创建正确的$broadcast
。然而,问题在于现在顺序很重要(即,如果我先按a
,然后按enter
,那么$broadcast
就是keypress:58keypress:13
,如果我按另一种方式,我会得到keypress:13keypress:58
)。