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

Porquê meu código não funciona?

Gostaria de compreender o motivo do meu código não funcionar. Compreendo que a resposta do professor realmente ficou mais simples, mas não consigo encontrar o erro dentro do meu raciocínio.

Basicamente eu criei uma variável a mais para acrescentar valor à variavel que define a cor... pra isso criei um For com a posição (que inicia em 1 para mudar a cor), e somando a variável de definição ela, irá prosseguir pelas cores, e retornar a valer 1 quando chegar ao limite.

O código nem sequer roda no navegador... trava por um tempo e depois dá erro, sem aparecer nada no console.

<canvas width="600" height="400"></canvas>

<script>

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');

    pincel.fillStyle = 'grey';
    pincel.fillRect(0, 0, 600, 400);

    function desenhaCirculo(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = cor[defineCor];
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2 * 3.14);
        pincel.fill();       
    }

    function mudaCor() {

        for(posicao = 1; posicao < cor.length; posicao++) {

            defineCor = defineCor + posicao;

                if(posicao = cor.length)    {

                    posicao = 1;
                }
        }
        return false;

    }

    var cor = ['blue', 'red', 'green'];
    var defineCor = 0;

       tela.onclick = desenhaCirculo;
    tela.oncontextmenu = mudaCor;

</script>
2 respostas
solução!

Cauã,

sua function mudaCor está implementada de forma errada. Ao ser invocada, ela:

  • cria um contador 'for' de 1 até 2;
  • atribui à variavel defineCor (cujo valor era 0) o valor de 1;
  • verifica se o contador posicao = cor.length (nunca será, pois posicao varia de 1 a 2, e cor.length é 3);
  • e se o contador posicao for maior, posicao será = 1 (isto nunca ocorrerá).

E na primeira invocação ele trava em um loop infinito.

    function mudaCor() {

        for(posicao = 1; posicao < cor.length; posicao++) {

            defineCor = defineCor + posicao;

            if(posicao = cor.length)    {

                posicao = 1;
            }
        }
        return false;
    }

O que musa a cor de fato é a alteração do índice defineCor entre 0, 1 e 2, definido na function desenhaCirculo.

pincel.fillStyle = cor[defineCor];

Então o correto seria implementar não um contador, mas um incrementador: a cada vez que é chamada a function mudaCor, a variável defineCor é acrescida de 1, e termina sua função:

Deve ser assim:

function mudaCor() {

    defineCor = defineCor + 1;
    if(defineCor >= cor.length)    {
        defineCor = 0;
    }
    return false;
}

Quando ficamos muito tempo olhando pra um código, não conseguimos ver coisas simples kkkkkkk

Acho que nunca ia perceber que criei um loop ao fazer uma comparação que nunca aconteceria...

Novamente obrigado pelo auxílio!