How to make a function that is performed when you press a certain sequence of keys? For example:

UP + UP + DOWN + DOWN + LEFT + RIGHT + Space

Closed due to the fact that the essence of the question is not clear to the participants of iluxa1810 , user207618, rjhdby , korytoff , Jean-Claude Nov 9 '16 at 19:20 .

Try to write more detailed questions. To get an answer, explain what exactly you see the problem, how to reproduce it, what you want to get as a result, etc. Give an example that clearly demonstrates the problem. If the question can be reformulated according to the rules set out in the certificate , edit it .

1 answer 1

// Секретная функция function secret(){ alert('Konami code has been entered!'); } // Преобразуем массив из лево-право в коды клавиш function transform(input){ let map = { 'лево': 37, 'верх': 38, 'право': 39, 'низ': 40, 'пробел': 32 }, newArr = []; input.forEach(name => { name = name.toLowerCase(); if(name in map) newArr.push(map[name]); }); if(input.length !== newArr.length) throw new Error(`Допускаются только следующие значения: "${Object.keys(map).join`", "`}"!`); else return newArr; } /** * Отслеживает комбинации * * @param {Array} comb Массив последовательности значений: лево, право, верх, низ, пробел * @param {Function} fn Секретная функция, будет вызвана при вводе последовательности * @param {Boolean} perm Более одного раза слушать? По умолчанию - нет */ function konami(comb, fn, perm = false){ let keys = transform(comb), // Создаём массив ключей pointer = 0, // Указатель на текущий ключ check = e => { // Если введённый код равен ожидаемой клавише if(e.keyCode === keys[pointer]){ // То проверяем достигли мы конца или нет if(keys.length === ++pointer){ if(!perm) document.removeEventListener('keydown', check); pointer = 0; fn(); } }else{ // Если ввели что-то другое - сбрасываем указатель на начало pointer = 0; } }; document.addEventListener('keydown', check); } konami(['лево', 'право', 'низ'], secret); konami(['лево', 'пробел', 'низ'], e => console.info('Ура, я всегда буду выполняться!'), true); 

  • some kind of nonsense in the example. - Jean-Claude
  • @ Jean-Claude, in what sense? - user207618