До сих пор я пытался найти все прослушиватели событий на основе Эта почта, но это не сработало:
getEventListeners(Element);
а также
'Chrome Developer tools > Elements > Event listeners'
Причина этого вопроса:
Я создаю 2D игра прорыва, используя чистый JavaScript, на основе учебника от Mozilla, и мне удалось улучшить его с помощью различных функций и нескольких уровней.
У меня есть набор добавленных прослушивателей событий, а также функция, которая их удаляет, пока все работает нормально.
У меня нет прослушивателя событий для ключевого кода 13 (который является клавишей ввода)
Проблема в том, что если я нажимаю клавишу Enter во время анимации на холсте, она меняет поведение с увеличением скорости мяча после каждого нажатия клавиши и, в конечном итоге, отображает другой рисунок.
Если я не нажму клавишу Enter, все будет работать как положено.
Единственный прослушиватель событий, который увеличивает скорость, - это событие «щелчок», но оно удаляется сразу после выполнения функции и не должно мешать игре.
Другая проблема заключается в том, что с помощью вышеупомянутых методов не обнаруживаются прослушиватели событий, даже те, которые я добавил сам, хотя они все еще работают.
Мне не удалось найти ничего, что связано с этим нежелательным поведением, и я хотел бы спросить, есть ли другие способы просмотра активных прослушивателей событий.
Здесь - это код, над которым я работаю
[Обновлено:
После осознания того, что ошибка возникла из-за события keydown, добавление preventDefault() решило проблему.
Однако я не уверен, почему это произошло, когда не было установки e.keyCode == 13, и почему метод preventDefault() решил проблему.
]
@DavidsKanal, когда я пытаюсь использовать getEventListeners на document или canvas, он возвращает дерево объектов, в котором я не могу найти ни одного прослушивателя событий. Ускорение происходит только тогда, когда я нажимаю клавишу Enter.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я предполагаю, что событие щелчка фокусируется на жирафе, позволяя ему выстрелить с помощью клавиши ввода. Вы можете попробовать mousedown и preventDefault, чтобы жираф не мог сосредоточиться:
giraffe.addEventListener('mousedown', function(e){
e.preventDefault();
giraffe.classList.remove('pulsate');
setTimeout(function(){
giraffe.classList.add('pulsate');
}, 0);
yahoo.play();
});
спасибо за вклад. Я пробовал это, но, к сожалению, это не сработало. Я даже попытался удалить всю функцию, чтобы посмотреть, имеет ли это какой-либо эффект, но ошибка не исчезла.
Похоже, ошибка кроется в обработчике событий 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;
Конечный результат: При нажатии клавиши Enter ничего не происходит
Благодарим @Joe Fitzsimmons за то, что указал мне в правильном направлении
Могу я спросить, почему недостаточно
getEventListeners? Зачем тебе другой способ? Ускорение происходит по любой клавише, или просто ввести? Учитывая, что у вас нет слушателя на keyCode === 13, это действительно странно.