Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

149
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda