Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

responsive voice tirou o texto

aparentemente meu código está certo, mas o voice não funciona e depois de inserí-lo no código o JSgame parou de exibir os textos. não aparece nem o pop-up de permissão. Já tentei em outros navegadores mas nada mudou, por favor alguem me ajude a achar onde eu errei.

Print do código: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Código Escrito:

let listaDeNumerosSorteados = []
let numeroSecreto = gerarNumeroAleatorio();
let tentativas = 1;
let numeroLimite = 10;

function exibirTextoNaTela(tag,texto)
{
    let campo = document.querySelector(tag);
    campo.innerHTML = texto;
    responsiveVoice.speak(texto, 'Brazilian Portuguese Female', {rate:1.2});
}

function exibirMensagemInicial()
{
    exibirTextoNaTela('h1', 'Jogo do número Secreto');
    exibirTextoNaTela('p', 'Escolha um número entre 1 e 10');
}

exibirMensagemInicial();


function verificarChute()
{
    let chute = document.querySelector('input').value;
    if (chute == numeroSecreto)
    {
        let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
        let mensagemTentativas = `Você descobriu o número secreto com ${tentativas} ${palavraTentativa}`;
        exibirTextoNaTela('h1', 'Acertou!');
        exibirTextoNaTela('p', mensagemTentativas);
        document.getElementById('reiniciar').removeAttribute('disabled');
    }

    else
    {
        if (chute > numeroSecreto)
        {
            exibirTextoNaTela('p','O número secreto é menor');
        }
        else
        {
            exibirTextoNaTela('p','O número secreto é maior');
        }
        
        tentativas ++

        limparCampo();
    }
}

function gerarNumeroAleatorio ()
{
    let numeroEscolhido = parseInt(Math.random() * numeroLimite + 1);
    let quantidadeDeElementosNaLista = listaDeNumerosSorteados.length

    if (quantidadeDeElementosNaLista == numeroLimite)
    {
        listaDeNumerosSorteados = [];
    }
    if (listaDeNumerosSorteados.includes(numeroEscolhido))
    {
        return gerarNumeroAleatorio();
    }
    else
    {
        listaDeNumerosSorteados.push(numeroEscolhido);
        console.log(listaDeNumerosSorteados);
        return numeroEscolhido;
    }
}

function limparCampo ()
{
    chute = document.querySelector('input');
    chute.value = '';
}

function reiniciarJogo()
{
    numeroSecreto = gerarNumeroAleatorio();
    limparCampo();
    tentativas = 1;
    exibirTextoNaTela('h1', 'Jogo do número Secreto');
    exibirTextoNaTela('p', 'Escolha um número entre 1 e 10');
    exibirMensagemInicial();
    document.getElementById('reiniciar').setAttribute('disabled', true)
}

Print da minha tela: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

Parece que o problema pode estar relacionado à execução assíncrona da fala usando o ResponsiveVoice. Quando a fala é iniciada, ela pode estar interferindo na atualização dos elementos HTML com os textos. Vamos tentar ajustar o código para lidar com isso.

Uma abordagem seria adicionar um atraso pequeno antes de chamar a função responsiveVoice.speak(), para garantir que os textos tenham tempo suficiente para serem exibidos. Vamos tentar isso:

function exibirTextoNaTela(tag, texto) {
    let campo = document.querySelector(tag);
    campo.innerHTML = texto;
    setTimeout(function() {
        responsiveVoice.speak(texto, 'Brazilian Portuguese Female', {rate: 1.2});
    }, 100); // Adicionando um atraso de 100 milissegundos
}

Com esse ajuste, após a atualização do texto nos elementos HTML, estamos esperando 100 milissegundos antes de iniciar a fala. Isso pode dar tempo suficiente para que os elementos sejam atualizados corretamente antes que a fala comece.

Tente fazer essa alteração e veja se resolve o problema.

não funcionou ainda Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Achei o erro, está na segunda linha de código: Você está chamando a função "gerarNumeroAleatorio()" antes de declarar a variável "numeroLimite", que é usada dentro da função.

let listaDeNumerosSorteados = []
let numeroSecreto = gerarNumeroAleatorio();
let tentativas = 1;
let numeroLimite = 10;

Só coloca a variável antes da chamada da função que vai funcionar.

let listaDeNumerosSorteados = []
let numeroLimite = 10;
let numeroSecreto = gerarNumeroAleatorio();
let tentativas = 1;

era isso mesmo, muito obrigada! agora está funcionando certinho o texto e o áudio ;)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software