1
resposta

Desenhe obras de arte

Desenha paleta, protege a linha da paleta, mostra a cor atual no final da linha da paleta e troca as cores conforme solicitado.

<canvas width="600" height="400"></canvas>
<br>
Escolha uma cor <input type="color">

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

    var cor = document.querySelector('input');
    var corCirculo = 'blue';
    var raio = 10;
    var desenha = false;

    var inicioPaleta = 0;
    var alt = 30;
    var larg = 30;
    var paleta = ['green','blue','red','white'];
    pincel.fillStyle = 'grey';
    pincel.fillRect(0,0,600,400);


    function desenhaCirculo(evento){
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        if(desenha && y < (400-(alt+10))){

           if (evento.shiftKey && evento.altKey) {

                alert('Só aperte uma tecla por vez, por favor!');

            }else if(evento.shiftKey && raio < 40){ 
                raio += 10;
            }else if(evento.altKey && raio > 10)  {
                raio -= 5;
            }
            //raio += (evento.shiftKey?10:0);
            //pincel.fillStyle = cor.value;
            pincel.beginPath();
            pincel.arc(x,y,raio,0,2*Math.PI);
            pincel.fill();
        }
        console.log(x + ',' + y);
    }

    function iniciaDesenho(){
        //alert('Apertou...');
        desenha = true;
    }
    function paraDesenho(){
        //alert('Soltou...');
        desenha = false;
    }


    function desenhaPaleta(){
        for (var i = 0;i<paleta.length;i++){
            pincel.fillStyle = paleta[i];
            pincel.strokeStyle = 'black';
            pincel.fillRect(inicioPaleta,400-alt,alt,larg);
            pincel.strokeRect(inicioPaleta,400-alt,alt,larg);
            inicioPaleta += larg;
            pincel.fill();
        } 
    }

    function trocaCor(evento){
        var x1 = evento.pageX - tela.offsetLeft;
        var y1 = evento.pageY - tela.offsetTop;

        if((x1 >= 0 && y1 >= (400-alt)) && (x1 <= larg && y1 <= 400)){

            pincel.fillStyle = paleta[0];

        }else if((x1 > larg && y1 >= (400-alt)) && (x1 <= larg*2 && y1 <= 400)){
            pincel.fillStyle = paleta[1];

        }else if((x1 > larg*2 && y1 >= (400-alt)) && (x1 <= larg*3 && y1 <= 400)){

            pincel.fillStyle = paleta[2];

        }else if((x1 > larg*3 && y1 >= (400-alt)) && (x1 <= larg*4 && y1 <= 400)){

            pincel.fillStyle = paleta[3];
        }
        pincel.fillRect(600-larg,400-alt,alt,larg);
        pincel.strokeRect(600-larg,400-alt,alt,larg);
    }

    desenhaPaleta();

    tela.onmousedown = iniciaDesenho;
    tela.onmouseup = paraDesenho;
    tela.onmousemove = desenhaCirculo;
    tela.onclick = trocaCor;


</script>
1 resposta

Gostei do seu resultado! Entrega o que foi pedido e algo mais.

Gostaria de compartilhar meu código aqui, mas como o código ficou logo, fiz uma postagem no Gist com o código da minha versão.

Funcionalidades acrescentadas:

  • novo design de paleta usando círculos;
  • paleta de 24 cores;
  • botão pra limpar a tela;
  • botões pra aumentar e diminuir o pincel;
  • mostrador com o tamanho do pincel;
  • mostrador com o nome da cor e;
  • botão pra preencher a tela com a cor atual do pincel.

Caso tenha interesse em dar uma conferida, deixei o código no link abaixo:

https://gist.github.com/arturpequeno/4696ae4f5ebb503ddbbd8123cc1c96bf

Também aceito sugestões e comentários construtivos sobre melhorias no código e novas funcionalidades!

Agradeço pela oportunidade de aprender!