Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

263
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!