Найти неизвестные активные слушатели событий Javascript


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

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

getEventListeners(Element);

а также

'Chrome Developer tools > Elements > Event listeners'

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


Причина этого вопроса:

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

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

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

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

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

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

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

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

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


[Обновлено: После осознания того, что ошибка возникла из-за события keydown, добавление preventDefault() решило проблему.

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

Могу я спросить, почему недостаточно getEventListeners? Зачем тебе другой способ? Ускорение происходит по любой клавише, или просто ввести? Учитывая, что у вас нет слушателя на keyCode === 13, это действительно странно.

DavidsKanal 04.10.2018 17:08

@DavidsKanal, когда я пытаюсь использовать getEventListeners на document или canvas, он возвращает дерево объектов, в котором я не могу найти ни одного прослушивателя событий. Ускорение происходит только тогда, когда я нажимаю клавишу Enter.

Lenny86 05.10.2018 10:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
255
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

giraffe.addEventListener('mousedown', function(e){
 e.preventDefault();
 giraffe.classList.remove('pulsate');
        setTimeout(function(){
            giraffe.classList.add('pulsate');
        }, 0);
        yahoo.play();
});

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

Lenny86 05.10.2018 10:55
Ответ принят как подходящий

Похоже, ошибка кроется в обработчике событий 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 за то, что указал мне в правильном направлении

Другие вопросы по теме