1
resposta

Fiz um código mais fácil, porém está dando erros na seleção de cor

Bom dia pessoal, resolvi o problema em partes, a seleção de cores apenas funciona quando clico na beira inferior da cor, não sei aonde o código está errado, fiz diferente do professor. Abraços

<meta charset="UTF-8">

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

<script>

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'lightgray';
    pincel.fillRect(0, 0, 600, 400);

    var desenha = false;
    var corAtual = 'blue';

    var xVermelho = 0;
    var xVerde  = 50;
    var xAzul = 100;
    var yQuadrados = 0;
    var tamanhoQuadrados = 50;


    function desenhaQuadrado(x, y, tamanho, cor) {

        pincel.fillStyle = cor;
        pincel.fillRect(x, y, tamanho, tamanho)
        pincel.fill();
    }

    function desenhaCirculo(x, y, raio, cor) {

        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2 * 3.14);
        pincel.fill();

    }

    function desenhaPaletaDeCores() {

        desenhaQuadrado(xVermelho, yQuadrados, tamanhoQuadrados, 'red');
        desenhaQuadrado(xVerde, yQuadrados, tamanhoQuadrados, 'green');
        desenhaQuadrado(xAzul, yQuadrados, tamanhoQuadrados, 'blue');

    }

    function lidaComMovimentoDoMouse(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

            if ((x > 0) && (x <= 50) && (y > 0 ) && (y <= 50)) {
                corAtual = "red"


            }

            if ((x > 50) && (x <= 100) && (y > 0 ) && (y <= 50)) {
                corAtual = "green"

            }

            if ((x > 100) && (x <= 150) && (y > 0 ) && (y <= 50)) {
                corAtual = "blue"

            }

            if ((desenha) && (x > 150)) {

                desenhaCirculo(x, y, 5, corAtual);
            }            

            if ((desenha) && (y > 50)) {

                desenhaCirculo(x, y, 5, corAtual);
            }            

    }

    function habilitaDesenhar() {

         desenha = true
       }


    function desabilitaDesenhar() {

        desenha = false;
    }



    desenhaPaletaDeCores(); // mostra os quadrados de seleção de cores

    tela.onmousemove = lidaComMovimentoDoMouse;

    tela.onmousedown = habilitaDesenhar;

    tela.onmouseup = desabilitaDesenhar;




</script>
1 resposta

marcel, você colocou a seleção de cores dentro da função lidaComMovimentoDoMouse e esta função está associada ao evento de movimento do mouse

tela.onmousemove = lidaComMovimentoDoMouse;

isso quer dizer que todas as condições (os ifs) que você colocou lá pra selecionar a cor são executadas quando você MOVE o mouse, então se você move o mouse lá na área do quadrado vermelho, ele muda a cor pra vermelho (mesmo sem você clicar! faz o teste pra ver) mas se antes de ir pra tela desenhar você passar o mouse na área verde, mudará para verde. e se passar pela verde e pela azul, mudará para azul. a moral da história é que sempre que você passa o mouse por cima de um quadrado, ele muda a cor.. por isso que parece que está funcionando só quando você clica na borda inferior, porque você clica e já vai pra tela cinza sem passar por outras cores :D por isso que na resposta do prof foi criada a função selecionaCor e ela foi associada ao clique do mouse, assim a seleção de cores SÓ ACONTECE quando você clica

tela.onclick = selecionaCor;

é esse trechinho aqui de cima que faz a mágica acontecer como esperamos, então sugiro que você tire as condições de seleção de cor de dentro da função de movimento do mouse pra poder fazer a seleção somente no clique