A solução do exercício propõe que a implementação para desabilitar o botão de reiniciar deve ser feita dentro da função "inicializaCronometro". Porém ainda existe um 'gap' entre o início da digitação e a inicialização (decrescente) do cronômetro, o que poderia causar um bug.
Sendo assim, fiz a implementação do código que desabilita o botão dentro da função "iniciaContadores". Isso garante que, assim que o usuário iniciar a digitação o botão que reinicia o jogo estará desabilitado.
Segue abaixo o código:
var tempoInicial = $("#tempo-digitacao").text();
var campo = $(".campo-digitacao");
$(function(){
atualizaTamanhoFrase();
iniciaContadores();
inicializaCronometro();
$("#botao-reiniciar").click(reiniciaJogo);
})
function atualizaTamanhoFrase(){
var frase = $(".frase").text();
var numPalavras = frase.split(" ").length;
$("#tamanho-frase").text(numPalavras);
}
function iniciaContadores() {
campo.on("input", function(){
var conteudo = campo.val();
var qntPalavras = conteudo.split(/\s+/).length - 1;
var qntCaracteres = conteudo.length;
$("#contador-palavras").text(qntPalavras);
$("#contador-caracteres").text(qntCaracteres);
$("#botao-reiniciar").attr("disabled", true);
});
}
function inicializaCronometro() {
var tempoRestante = $("#tempo-digitacao").text();
campo.one("focus", function(){
var intervalID = setInterval(function(){
tempoRestante--;
$("#tempo-digitacao").text(tempoRestante);
if (tempoRestante < 1){
$(".campo-digitacao").attr("disabled", true);
$("#botao-reiniciar").attr("disabled", false);
clearInterval(intervalID);
}
}, 1000)
})
}
function reiniciaJogo(){
campo.attr("disabled", false);
$("#contador-palavras").text("0");
$("#contador-caracteres").text("0");
$("#tempo-digitacao").text(tempoInicial);
$(".campo-digitacao").val('');
inicializaCronometro();
}