Preguntaría si alguien conoce un Event Listener, que comienza a funcionar cuando no se presiona un botón en el teclado durante un período de tiempo determinado, algo así:
document.addEventListener('wait', myFunction);Puede usar setTimeout y clearTimeout para esto.
setTimeout ejecuta una función después de un período de tiempo específico. También devuelve una ID que se puede pasar a clearTimeout .
clearTimeout cancela el tiempo de espera asociado con la ID que le das.
Llamaría a setTimeout para iniciar el "temporizador inactivo" y almacenaría la ID del temporizador en una variable. Luego, si el usuario presionó una tecla (que podría detectar usando un detector de eventos de keypress de tecla), entonces usaría clearTimeout para cancelar el temporizador (y tal vez comenzarlo de nuevo).
Puede encontrar una respuesta útil aquí: Cómo detectar el tiempo de inactividad en JavaScript
Usaría el evento 'keypress' . ¡Así que básicamente cree un tiempo de espera y reinícielo cada vez que presione una tecla!
¡Espero eso ayude!
No hay un oyente que haga eso. Así que tal vez:
Configure una variable de estado que se restablece cuando se presiona una tecla.
Crea una función de retardo. En este ejemplo, devuelvo una promesa de la función que se puede awaited .
Cuando se llama a main , awaits que se resuelva la promesa de delay . Si no se ha presionado ninguna tecla, llama a una función y espera a que se complete, luego vuelve a llamar a main ; de lo contrario, no se realiza ninguna otra acción.
// Cache the output element used in `writer` const output = document.querySelector('.output'); // Initialise the status let status = false; // Check for `keypress` events document.addEventListener('keypress', () => status = true); // Accepts an argument specifying how // many milliseconds delay there will be function delay(n) { return new Promise(res => { setTimeout(() => res(), n); }); } // Random function to test the delay works function writer() { return new Promise(async res => { const str = 'Hello world!'; for (let i = 0; i <= str.length; i++) { await delay(250); output.textContent = str.substr(0, i); } res(); }); } // Wait 3 seconds. If no key has been pressed // call the `writer` function. Reset the status, and // call `main` again async function main() { await delay(3000); if (!status) { console.log('No key pressed - calling writer()'); await writer(); } else { console.log('Key pressed - no further action'); } status = false; main(); } main(); <div class="output"></div>