Найти неизвестных активных слушателей событий Javascript - PullRequest
0 голосов
/ 04 октября 2018

Я хотел бы найти неизвестных слушателей событий

До сих пор я пытался найти всех слушателей событий на основе Этот пост , но он не работал:

getEventListeners(Element);

и

'Chrome Developer tools > Elements > Event listeners'

Существуют ли другие способы обнаружения активных прослушивателей событий?


Причина, по которой это требуется:

Я создаю 2D прорывную игру , используя чистый JavaScript на основе учебника от Mozilla и сумевший дополнить его различными функциями и несколькими уровнями.

У меня есть набор добавленных событийслушатели, а также функция, которая удаляет их, пока все работает нормально.

У меня нет прослушивателя событий для кода клавиши 13 (который является клавишей ввода)

Проблема заключается в том, что если я нажму EnterКлавиша, в то время как анимация продолжается на холсте, она меняет поведение с увеличением скорости мяча после каждого нажатия клавиши, и в конечном итоге она отображает другой рисунок.

Если я не нажимаю клавишу Enter, все работает какпредназначен.

Единственный слушатель событий, который увеличивает скорость, это событие «щелчка», но оно удаляется сразу после выполнения функции и не должно мешать игре.

Другая проблема заключается в том, что с помощью вышеупомянутых методов не обнаруживаются прослушиватели событий, даже те, которые я добавил сам, хотя они все еще работают.

Я не смог найти ничего, что относится кк этому нежелательному поведению, и я хотел бы спросить, есть ли другие способы просмотра активных слушателей событий.

Здесь - код, над которым я работаю


[ РЕДАКТИРОВАТЬ: После осознания того, что ошибка происходит из-за события keydown, добавление preventDefault() решило проблему.

Однако я не уверен, почему это произошло, когда изначально не было настройки e.keyCode == 13, и почему метод preventDefault() решил эту проблему.]

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Кажется, что ошибка лежит в обработчике события keydown (keyDownHandler).Это то, что вызывало неожиданное поведение.

Ошибка исчезла после добавления функции e.preventDefault(); к keyDownHandler.

Оригинал:

function keyDownHandler(e) { //on key down
e.keyCode == 37 ? leftPressed = true : null;
e.keyCode == 39 ? rightPressed = true : null;

}

После:

function keyDownHandler(e) { //on key down
e.preventDefault();
e.keyCode == 37 ? leftPressed = true : null;
e.keyCode == 39 ? rightPressed = true : null;

Конечный результат: Ничего не происходит при нажатии клавиши ввода

Кредит @ Joe Fitzsimmons для направления меня в правильном направлении

0 голосов
/ 04 октября 2018

Я предполагаю, что событие щелчка фокусирует жирафа, позволяя ему выстрелить клавишей ввода.Вы можете попробовать mousedown и предотвратить дефолт, чтобы удержать жирафа от фокусировки:

giraffe.addEventListener('mousedown', function(e){
 e.preventDefault();
 giraffe.classList.remove('pulsate');
        setTimeout(function(){
            giraffe.classList.add('pulsate');
        }, 0);
        yahoo.play();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...