2
respostas

Usei array para definir o tamanho do raio, e funcionou. É trabalho desnecessário ou o importante é funcionar?

<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 raio = [10 , 30];
    var indiceraio = 0;

    function desenhaCirculo(evento) {

        if (evento.shiftKey) {

           indiceraio = indiceraio + 1; // raio agora passa a valer 30!
        }else{ indiceraio = 0};


        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = 'blue';
        pincel.beginPath();
        pincel.arc(x, y, raio[indiceraio], 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);

    }

    tela.onclick = desenhaCirculo;




</script>
2 respostas

Oi Vagner, não há problema algum em utilizar o array.

Na verdade, acho inclusive que é uma solução elegante, imagina que ao invés de dois tamanhos de círculo (com SHIFT ou sem SHIFT), você tivesse a necessidade de outros tamanhos (com ou sem CTRL, com SHIFT e CTRL combinados, etc) ?

No geral, se eu vejo que vou fazer algo de forma repetida mais do que duas vezes, não acho sentido em replicar código.

Vou deixar como código de referência a utilização de dicionários ao invés de um array, onde você pode fazer uso da própria estrutura do dicionário. Veja que criei também um dicionário para CORES, que checa se o botão CTRL está apertado, para decidir se o círculo é azul ou vermelho. Observe que dá pra combinar círculos grandes, pequenos, azuis e vermelhos:

<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 raio = { false : 10 , true : 30};
    var cor  = { false : 'blue' , true : 'red'};

    function desenhaCirculo(evento) {
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = cor[evento.ctrlKey];
        pincel.beginPath();
        pincel.arc(x, y, raio[evento.shiftKey], 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);
    }

    tela.onclick = desenhaCirculo;

</script>

Bom dia, Vagner! Como vai?

Achei bacana a sua solução! Contudo, eu tenho uma dica!

Veja que para passar o raio para o valor 30, vc tem que fazer algo como indiceraio = indiceraio + 1 e depois raio[indiceraio]! Mas esse valor 1 solto aí é o que a gente chama de número mágico! Não sabemos o que ele significa e dificulta um pouco o entendimento do código!

Sendo assim, uma implementação melhor ainda pra agregar semântica ao seu código e remover esses números mágicos, seria fazer o seguinte:

const raios = {
     dez: 10,
     vinte: 20,
     trinta: 30
};
// Restante do código omitido.

Daí, na hora de utilizar:

raioAtual = raios.dez;

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!