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

142
Vistas
El temporizador de cuenta regresiva de Javascript se mezcla entre dos temporizadores

Tengo los siguientes códigos Javascript

 // COUNTDOWN TIMER function refillTimer(refillTimer){ var countDownDate = new Date(refillTimer).getTime(); var x = setInterval(function() { var now = new Date().getTime(); var distance = countDownDate - now; var hours = ("0" + Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))).slice(-2); var minutes = ("0" + Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60))).slice(-2); var seconds = ("0" + Math.floor((distance % (1000 * 60)) / 1000)).slice(-2); document.getElementById("refillTimer").innerHTML = hours + ":" + minutes + ":" + seconds; if(distance < 0){ clearInterval(x); document.getElementById("refillTimer").innerHTML = "00:00:00"; } }, 1000); } // ON SWIPE PERFORM ACTION async function swipeAction(currentElementObj, swipeType) { var cardId = currentElementObj.getAttribute("value"); var dataString = { card: cardId, swipe: swipeType }; let response = await new Promise((resolve, reject) => { try { var xhr = new XMLHttpRequest(); xhr.open("POST", "processes/swipe.php", true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.responseType = "json"; xhr.send(JSON.stringify(dataString)); xhr.onreadystatechange = function () { let resObj = xhr.response; if(xhr.readyState == 4 && xhr.status == 200 && resObj) { if(resObj.action == 'gameover'){ refillTimer(resObj.nextgameoverTimer); }else if(resObj.action == 'killsalloted'){ refillTimer(resObj.nextkillsallotedTimer); } } }; }catch(e){ reject(e.toString()); } }); }

Como puede ver en la función swipeAction() , tengo dos condiciones if y else if sobre el éxito donde llamo a los temporizadores. El problema aquí es que una vez que se llama al temporizador bajo una condición, al ser llamado en la otra condición, los temporizadores se superponen entre sí. Esto no debería suceder. Los temporizadores deben cargarse individualmente. Lo que técnicamente significa que la función del temporizador debe actualizarse cada vez que se llama o algo similar. Mire el GIF a continuación para ver el problema exacto.

ingrese la descripción de la imagen aquí

Aquí, una condición llama a un temporizador de 12 horas mientras que la otra llama a un temporizador de 24 horas. Ambos temporizadores se superponen entre sí como se muestra arriba en lugar de mostrar solo el respectivo. ¿Cuál puede ser la solución requerida?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Ponga return x en refillTimer . Coloque let timer en la parte superior de swipeAction , cambie ambos refillTimer(...) en timer = refillTimer(...) . Ponga clearInterval(timer) encima de if(resObj.action...) .

Alternativamente, cambie var x = setInterval(...) a timer = setInterval(...) (no var ; también, evite x como nombre de variable, especialmente si tiene un alcance mayor). Ponga let timer delante de function refillTimer(...) { ... } . Ponga clearInterval(timer) al comienzo de la función refillTimer .

Cualquiera de estos cursos de acción garantizará que borre el temporizador de intervalos anterior antes de instalar uno nuevo y, por lo tanto, solo tendrá uno funcionando a la vez.

about 4 years ago · Juan Pablo Isaza 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