Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.10.2016, 19:18
Новичок на форуме
Отправить личное сообщение для alexlead Посмотреть профиль Найти все сообщения от alexlead
 
Регистрация: 16.10.2016
Сообщений: 6

проблема перехвата нажатия клавиш управления в Файрфокс
Привет всем!

Столкнулся с проблемой разницы работы в разных браузерах.
Написал браузерную версию игры Змейка. Управление стандартными клавишами (вверх, вниз, вправо, влево). Работает во всех браузерах (даже IE), кроме Файрфокса.

document.addEventListener("keydown" ,function (event){
switch(event.keyCode){
case 40:
.....
}

До входа в цикл нажатие принимается полностью (т.е. нажал вниз, следующим шагом после старта будет движение вниз, нажал вниз, вверх - следующим шагом будет вверх и т.п.), но после запуска движения змейки
timerId = setInterval(nextStep, 200);
перестает реагировать на нажатие клавиш.

(рабочая версия: http://runwave.ru/)

Если кто сталкивался, подскажите в какой части смотреть
Ответить с цитированием
  #2 (permalink)  
Старый 17.10.2016, 00:34
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

alexlead, не disable кнопки
Ответить с цитированием
  #3 (permalink)  
Старый 17.10.2016, 07:41
Новичок на форуме
Отправить личное сообщение для alexlead Посмотреть профиль Найти все сообщения от alexlead
 
Регистрация: 16.10.2016
Сообщений: 6

наверное нет, проблема только в файрфоксе и только в цикле. Остальные браузеры работают нормально.
Ответить с цитированием
  #4 (permalink)  
Старый 17.10.2016, 08:18
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

alexlead, а ты проверь
Ответить с цитированием
  #5 (permalink)  
Старый 17.10.2016, 16:52
Новичок на форуме
Отправить личное сообщение для alexlead Посмотреть профиль Найти все сообщения от alexlead
 
Регистрация: 16.10.2016
Сообщений: 6

Проблему у себя локально нашёл - место где выключается - но как-то всё магически смотрится:
после запуска игры отключаю кнопки "New game" и "Start" соответственно функциями:
document.getElementById('startButton').setAttribut e('disabled','disabled');
document.getElementById('newGameButton').setAttrib ute('disabled','disabled');

- обе кнопки сгенерированы кодом JS при загрузке игры.

<div class='buts placeButtons'><button id='newGameButton' onclick='newGame();'>New Game</button><button id='startButton' onclick='startGame();'>START</button></div>

Если комментирую строку:
document.getElementById('startButton').setAttribut e('disabled','disabled');
то клавиши начинают работать. Причем, если комментирую другую строку отдельно, то это не помогает. Пробовал переименовать клавишу в startButton1, это не помогает тоже не помогает. т.е. вопрос конкретно в этой строке, и даже не в порядке строк (пробовал менять местами).

Дальше попробую разобраться. Но поведение файрфокса для меня пока непонятно.
Ответить с цитированием
  #6 (permalink)  
Старый 17.10.2016, 18:14
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

alexlead, disable функции
function startGame(){
    if (isDisabledStartGame) return;
    timerId = setInterval(nextStep, 200);
    isDisabledStartGame = isDisabledNewGame = true;
}
Ответить с цитированием
  #7 (permalink)  
Старый 18.10.2016, 12:04
Новичок на форуме
Отправить личное сообщение для alexlead Посмотреть профиль Найти все сообщения от alexlead
 
Регистрация: 16.10.2016
Сообщений: 6

Попробовал заменить функцию на этот код, не срабатывает.
Попробовал сделать вызов через функцию, через .onclick и т.п.
Поменял синтаксис блокирования клавиш:
document.getElementById('startButton').disabled = true;
вместо
document.getElementById('startButton').setAttribut e('disabled','disabled');
тоже не помогает. Пока блокируется клавиша старт, файрфокс блокирует считывание клавиатуры. Как только перестаю блокировать клавишу старт, файрфокс начинает работать. (Остальные браузеры на этот пункт не заморачиваются, только файрфокс.)
Там возникают другие ошибки.
Ответить с цитированием
  #8 (permalink)  
Старый 18.10.2016, 22:31
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

alexlead, думал сам сообразишь что еще исправить но увы...
var isDisabledStartGame = false, isDisabledNewGame = false;
// ...
function finishGame() {
	// ...
	isDisabledNewGame = false;
}
// ...
function startGame() {
	if (isDisabledStartGame) return;
	// ...
	isDisabledStartGame = isDisabledNewGame = true;
}
// ...
function newGame() {
	if (isDisabledNewGame) return;
	// ...
	isDisabledStartGame = false;
}
Ответить с цитированием
  #9 (permalink)  
Старый 19.10.2016, 16:41
Новичок на форуме
Отправить личное сообщение для alexlead Посмотреть профиль Найти все сообщения от alexlead
 
Регистрация: 16.10.2016
Сообщений: 6

Понял идею, реализовал, работает.

Благодарю!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оброботка одновременного нажатия 2-х клавиш NullNull Events/DOM/Window 3 05.11.2015 01:16
Проблема с фазой перехвата в addEventListener, вопрос для профи kichSman Events/DOM/Window 1 05.02.2013 01:43
Обработка нажатия двух клавиш 12345678 Events/DOM/Window 1 15.01.2013 15:41
Можно ли посылать нажатия клавиш контролу? Vornic Элементы интерфейса 1 21.12.2012 07:54
эмуляция нажатия клавиш jetli13 Общие вопросы Javascript 4 24.09.2010 12:08