Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

261
Vistas
RXJS, ¿Cómo ver el mouse y el teclado y hacer algo cuando no se ha usado ninguno durante algún tiempo?

Necesito ejecutar una función si ni el mouse se ha movido ni el teclado se ha tocado durante 1 min.

Probé el siguiente código pero no parece funcionar. ¿Cómo puedo arreglarlo? Gracias por tu ayuda.

 mouseEvent$ = fromEvent(document, 'mouseMove'); keyPress$ = fromEvent(document, 'keyup'); merge( this.mouseEvent$.pipe(startWith(null)).pipe(switchMap(() => timer(10000, 1000))), this.keyPress$.pipe(startWith(null)).pipe(switchMap(() => timer(10000, 1000))), ).subscribe(() => console.log("----));
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Lo primero que debe notar es que escribió mouseMove incorrectamente.

Así es como podría hacer esto:

 merge( fromEvent(document, 'mousemove'), fromEvent(document, 'keyup') ).pipe( share(), startWith(null), debounceTime(60000), take(1), retry() ).subscribe(_ => console.log("1 Minute without input"));
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí está mi opinión sobre esto:

 const mouseMove$ = fromEvent<MouseEvent>(document, 'mousemove'); const keyPress$ = fromEvent<KeyboardEvent>(document, 'keyup'); const mergeBothEvents = merge(keyPress$, mouseMove$); const interval$ = timer(60000); mergeBothEvents .pipe( startWith('initial'), switchMap(() => { return interval$; }) ) .subscribe(() => { console.log('60 seconds past'); console.log('Perform function here'); });

Un poco de lo que sucede en el código.

fromEvent<MouseEvent> utilizado para capturar los movimientos del mouse.

fromEvent<KeyboardEvent> se usa para capturar el evento de clic de la tecla del teclado hacia arriba.

merge(keyPress$, mouse$) se usa para fusionar ambos observables para que puedan ejecutarse en paralelo.

timer(60000) se usa para verificar el tiempo de un minuto antes de ejecutar la función requerida.

En mergeBothEvents hemos usado más operadores startWith() y switchMap

startWith() se usa para el caso límite en el que si el usuario no hace nada (mouse o teclado) cuando ingresa a la página, no se emitirá el evento mergeBothEvents . Gracias a @MrkSef por señalarlo.

Finalmente switchMap se usa para cancelar la suscripción anterior del evento cuando el usuario mueve el mouse o presiona el teclado para que el temporizador se reinicie desde el segundo 0.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda