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

borracha

como fazria pra apagar o que desenhei sem ter que recarregar a pagina?

2 respostas
solução!

Olá, Thais. Acho que você verá isso melhor mais pra frente, mas vou mostrar aqui como ficaria adicionar um botão para limpar a tela.

Primeiro você teria q colocar o botão na tela:

<input class="botao" type="button" value="Limpar">

Depois declarar uma variável que será referência para esse botão, a partir da classe que definimos no botão. E já podemos atribuir qual função será executada em seguida:

const button = document.querySelector('.botao');
button.addEventListener('click', limpar);

E por fim a função para limpar (apenas vai repintar de cinza):

function limpar() {
    pincel.fillStyle = 'grey';
    pincel.fillRect(0, 0, 600, 400);
}

O código completo ficaria assim:

<canvas width="600" height="400"></canvas>
selecione a cor <input type="color">
<input class="botao" type="button" value="Limpar">

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

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

    const button = document.querySelector('.botao');
    button.addEventListener('click', limpar);

    function limpar() {
        pincel.fillStyle = 'grey';
        pincel.fillRect(0, 0, 600, 400);
    }

    var desenha = false;

    function desenhaCirculo(evento) {

        if(desenha) {
            var x = evento.pageX - tela.offsetLeft;
            var y = evento.pageY - tela.offsetTop;
            pincel.fillStyle = paleta.value;
            pincel.beginPath();
            pincel.arc(x, y, 10, 0, 2 * 3.14);
            pincel.fill();
        }
        console.log(x + ',' + y);
    }

    tela.onmousemove = desenhaCirculo;

    tela.onmousedown = function() {
        desenha = true;
    }

     tela.onmouseup = function() {
        desenha = false;
    }

</script>

Olá, Thais! Tudo bem contigo?

Poderíamos criar uma função para limparmos a tela

    function limpaTela() {

        pincel.clearRect(0, 0, 600, 400);

    }

Após o console.log, acrescentei um if com uma condição de evento para quando eu apertar a tecla SHIFT

if (event.shiftKey) {

assim eu chamo minha função para limpar a tela após apertar a tecla

limpaTela();

Porém se eu deixar assim o meu canvas com o fundo cinza desaparece. para evitar isso, coloco novamente após limpar

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

Toda essa parte ficará assim

    function limpaTela() {

        pincel.clearRect(0, 0, 600, 400);

    }

    // atribuindo diretamente a função anônima
    tela.onmousemove = function (evento) {

        if (desenha) {
            var x = evento.pageX - tela.offsetLeft;
            var y = evento.pageY - tela.offsetTop;
            pincel.fillStyle = 'blue';
            pincel.beginPath();
            pincel.arc(x, y, 10, 0, 2 * 3.14);
            pincel.fill();
        }
        console.log(x + ',' + y);
        if (event.shiftKey) {
            limpaTela();
            pincel.fillStyle = 'grey';
            pincel.fillRect(0, 0, 600, 400);
        }
    }

É isso aí ;-)

Um abraço e bons estudos, Thais!

Qualquer dúvida, estamos aqui!!!