Егор!
Отслеживайте все нажатия клавиш и собирайте их в промежуточный буфер до тех пор, пока в буфере не получится искомый пароль или чит‑код:
// Как быстро забывать ввод. Ждём 2 секунды: если нажатий на клавиши нет,
// считаем, что ввод окончен
const INPUT_THRESHOLD = 2000
function onCheatCode(cheatCode, callback) {
// В buffer собираем то, что получается
let buffer = []
let lastInputAt
document.addEventListener('keydown', (event) => {
const key = event.key.toLowerCase()
const currentTime = Date.now()
if (currentTime - lastInputAt > INPUT_THRESHOLD) buffer = []
// Добавляем нажатую клавишу в буфер
buffer.push(key)
lastInputAt = currentTime
// Если буфер совпал с кодом, очищаем буфер и вызываем колбэк
if (buffer.join('') === cheatCode) {
buffer = []
return callback()
}
})
}
onCheatCode('power overwhelming', () => location.href = 'https://youtu.be/AJKx1XDBqNo')
Советую получившийся код оптимизировать для вашей задачи. Скажем, если чит‑кодов много, лучше использовать один обработчик keydown
на все чит‑коды, а не по обработчику на каждый код. Если на странице есть текстовые поля, стоит игнорировать ввод в них, опираясь на event.target.tagName
.
P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.