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

A bolinha não volta a ser azul

O código funcionou direitinho, porém, quando eu clico mais de 2x ele não volta a ser azul, continua verde. É assim mesmo?

<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);

var cores = ['blue', 'red', 'green']
var indiceCorAtual = 0;

function desenhaCirculo(evento) { 

    var x = evento.pageX - tela.offsetLeft; //offsetLeft/Top é usado para tirar as partes brancas da tela e levar em consideração só o canvas
    var y = evento.pageY - tela.offsetTop;

    pincel.fillStyle = cores[indiceCorAtual];
    pincel.beginPath();
    pincel.arc(x, y, 10, 0, 2*3.14);
    pincel.fill();
    console.log(x + ',' + y);
}

tela.onclick = desenhaCirculo;

function mudaCor() {

    indiceCorAtual++;

    if(indiceCorAtual >= cores.lenght) {
        indiceCorAtual = 0;
    }
    return false;

}

  tela.oncontextmenu = mudaCor;


</script>    
2 respostas

Você tem que colocar o mudaCor() dentro do método desenhaCirculo();, mais especificamente antes de começar a desenhar o círculo. Do jeito que está, o mudaCor() não é chamado nunca.

Curioso você dizer que está funcionando parcialmente, já que sua função é desenhaCirculo(evento) mas você está chamando-o com um tela.onclick = desenhaCirculo;, isto é, sem o parâmetro (ou pelo menos sem os parênteses).

solução!

Olá Flávia, o problema do seu código é um simples erro de sintaxe que acontece comigo várias vezes rs. Na seguinte parte do código:

if(indiceCorAtual >= cores.lenght) {
        indiceCorAtual = 0;
    }

Você escreveu cores.lenght quando o correto seria cores.length

Espero ter ajudado!