Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 03.08.2019, 21:32
Новичок на форуме
Отправить личное сообщение для Temcher Посмотреть профиль Найти все сообщения от Temcher
 
Регистрация: 13.02.2018
Сообщений: 9

Не понятна строка с if
var pressedKeys = {};

onkeydown = function(e) {
	if(e.code in pressedKeys) return;
	pressedKeys[e.code] = true;
};

Сначала мы создали пустой объект pressedKeys, потом событие onkeydown. Если(код клавиши в объекте) вернуть; Эта строка проверяет есть ли код клавиши в объекте? Так ведь объект изначально пустой. не понимаю. (Сам оператор if мне понятен)
Ответить с цитированием
  #12 (permalink)  
Старый 03.08.2019, 21:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Temcher,
если код клавиши записан, то не записывать его снова и снова и снова и снова и снова ... onkeydown это пулемёт
Ответить с цитированием
  #13 (permalink)  
Старый 03.08.2019, 22:09
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Malleys, зачем извращаться с bind если в api изначально заложена функциональность именно для такого случая:
function PressedKeysRegistry() {}
PressedKeysRegistry.prototype = {
	constructor: PressedKeysRegistry,
	start: function() {
		addEventListener("keydown", this);
		addEventListener("keyup", this);
	},
	stop: function() {
		removeEventListener("keydown", this);
		removeEventListener("keyup", this);
	},
	handleEvent: function(event) {
		if(event.type === "keydown") {
			if(this[event.code]) return;
			this[event.code] = true;
		} else if(event.type === "keyup") {
			delete this[event.code];
		}
	}
};
__________________
29375, 35
Ответить с цитированием
  #14 (permalink)  
Старый 03.08.2019, 22:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Aetae,
Ответить с цитированием
  #15 (permalink)  
Старый 04.08.2019, 00:55
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от рони
если код клавиши записан, то не записывать его снова и снова и снова и снова и снова ... onkeydown это пулемёт
хотя сама проверка тут более тяжелая операция чем постоянная перезапись объекта.
Ответить с цитированием
  #16 (permalink)  
Старый 04.08.2019, 01:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

j0hnik,
на всякий случай ... код изначально был из примера
Цитата:
onkeydown = function(e) {
if(pressedKeys[e.code]) return;
pressedKeys[e.code] = true;

if(e.code === "KeyW") {
console.log('Кнопка W нажата');
} else if(e.code === "KeyD") {
console.log('Кнопка D нажата');
}
}
как иначе вывести, только один раз сообщение, что клавиша нажата?
Ответить с цитированием
  #17 (permalink)  
Старый 04.08.2019, 01:10
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от рони
как иначе вывести, только один раз сообщение, что клавиша нажата?
С проверкой
pressedKeys[e.code] = true;

а тут можно и без
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема перехвата нажатия клавиш управления в Файрфокс alexlead Firefox/Mozilla 0 16.10.2016 19:18
Оброботка одновременного нажатия 2-х клавиш NullNull Events/DOM/Window 3 05.11.2015 01:16
Обработка нажатия двух клавиш 12345678 Events/DOM/Window 1 15.01.2013 15:41
Обработка нажатия на элемент и его родитель klev2004 Общие вопросы Javascript 3 12.12.2012 20:07
обработка одновременно двух клавиш клавиатуры Destrifer Events/DOM/Window 8 20.12.2008 15:25