He estado tratando de hacer un sitio web para personas que sienten que su vida está en peligro o algo por el estilo. Estoy tratando de recrear la función de tecla de escape del Proyecto Trevor con javascript.
Tengo un código base pero no funciona:
window.addEventListener("keydown", checkKeyPressed, false); var escTime = 0; function checkKeyPressed(evt) { if (evt.keyCode === "27") { window.clearTimeout(); escTime++; window.setTimeout(function(){ escTime = 0; }, 1000); } if (escTime == 3) { window.location.replace("https://classroom.google.com/h"); escTime = 0; } }Yo diría que estás bastante cerca, pero:
Debe recordar el identificador de setTimeout para cancelarlo, porque debe dárselo a clearTimeout .
keyCode está en desuso (aunque es poco probable que desaparezca realmente), mire la key y code en su lugar.
No tiene sentido volver a asignar 0 a escTime , treplace` sale de la página de todos modos.
Así que tal vez:
window.addEventListener("keydown", checkKeyPressed, false); let escapeTimerHandle = 0; let escapeCount = 0; function checkKeyPressed(evt) { if (evt.key === "Escape" || evt.key === "Esc") { clearTimeout(escapeTimerHandle); escapeCount++; if (escapeCount == 3) { window.location.replace("https://classroom.google.com/h"); } else { escapeTimerHandle = setTimeout(function(){ escapeCount = 0; }, 1000); } } }Puede lograr esto usando un cierre :
function createCheckKeyPressFunction() { let timeout; let escTime = 0; function checkKeyPressed(evt) { if (evt.key === "Escape") { console.log("Escape Detected"); window.clearTimeout(timeout); escTime += 1; timeout = window.setTimeout(()=> { escTime = 0; console.log("Escape count reset to zero, due to timeout."); }, 1000); } if (escTime === 3) { let url = "https://classroom.google.com/h"; console.log(url); window.location.replace(url); escTime = 0; } } return checkKeyPressed; } let checkKeyPressed = createCheckKeyPressFunction(); window.addEventListener("keydown", checkKeyPressed, false); <p>Click to give this embedded snippet focus, and then test by hitting the ESC key.</p> Dado que el fragmento de código (arriba) está incrustado en esta página, asegúrese de hacer clic en él después de ejecutarlo (para enfocarlo) antes de probarlo con la Esc .