Keydown/Keyup被呼叫7次



我目前正在构建一个带有游戏的AngularJS网站。在这里,我想使用键盘来恢复/暂停和控制游戏。我必须添加eventlistener的代码如下:

$window.addEventListener('keydown', function(e) {
     if ($scope.gameState.playing) {
        for (var control in controls) {
            if (controls.LEFT.indexOf(e.keyCode) > -1) {
                gameEngine.startLeft();
            } else if (controls.RIGHT.indexOf(e.keyCode) > -1) {
                gameEngine.startRight();
            } else if (controls.POWERJUMP.indexOf(e.keyCode) > -1) {
                gameEngine.powerJump();
            } else if (controls.PAUSE.indexOf(e.keyCode) > -1) {
                $scope.pauseGame();
            }
        }
    }
});

函数的内容不是很重要,但我的问题是,每次按键都会调用它7次。keyup也是如此。无论我按多快或多慢。

var GameApp = angular.module('GameApp', []);
GameApp.controller('GameController', function($scope, $timeout, $window)

上面的代码是我如何使用$window参数创建Angular应用程序和控制器的。

我找不到解决这个问题的办法。我希望有人知道为什么会发生这种事。

猜测:事件处理程序注册了7次吗?

要进行检查,请执行以下操作:

$window.addEventListener('keydown', function(e) {
  if(e.iAmNotAlone) {
    throw new Error('Oh dear!');
  }
  e.iAmNotAlone = true;
  /* for control in control thingy goes here */
});

你是在服务的单例部分还是在某种控制器中设置的(每次都会重新创建,并可以解释这种行为)?

最新更新