1
resposta

Cuidado com a ordem da sua função...

Olá, pessoal!

Gostaria de mostrar minha evolução neste código, pois estava tudo certo mas na ordem errada e gastei alguns minutos até perceber.

Esse é o código que fiz primeiro:

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

function desenhaCirculo(evento){
    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;
    var raio = 10;
    pincel.fillStyle = 'blue';
    pincel.beginPath();
    pincel.arc(x, y, raio, 0, 2 * 3.14);
    pincel.fill();
    var shift = evento.shiftKey 
        if(shift) {
            raio = 30;
        } else {
            raio = 10;} 
    console.log(shift);
}
tela.onclick = desenhaCirculo;
</script>

Inicialmente a 'var raio = 10' estava dentro da função 'desenhaCirculo'. Chequei via 'console.log(shift)' que o pressionamento do shift estava sendo capturado mas nada alterava no raio. Depois de alguns testes percebi que o pressionamento do shift só era verificado durante o clique. Voltei ao meu código e me dei conta de que fazia sentido, afinal toda a estrutura do 'evento.shiftKey' estava dentro da 'desenhaCirculo'. Voltando ao 'var raio = 10', resolvi tirá-lo da função e torná-lo uma variável global. Não sei por que, mas funcionou. Agora o raio do círculo estava sendo alterado, mas havia algo errado. Testei algumas vezes e o resultado era o seguinte:

1º clique teste SEM o shift pressionado, me retornava circulo com raio 10, OK; 
2º clique teste COM shift pressionado, me retornava circulo com raio 10, OPA; 
3º clique teste SEM shift pressionado, me retornava circulo com raio 30, achei o erro..

Retornei ao teste e visualizei que toda a estrutura do shift estava dentro da 'desenhaCirculo' mas DEPOIS das instruções para desenhar o círculo, por conta disto apenas o raio do círculo seguinte era alterado. Alterei a ordem e o código ficou assim:

<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;
function desenhaCirculo(evento){
    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;
    var shift = evento.shiftKey 
        if(shift) {
            raio = 30;
        } else {
            raio = 10;} 
    console.log(shift);
    pincel.fillStyle = 'blue';
    pincel.beginPath();
    pincel.arc(x, y, raio, 0, 2 * 3.14);
    pincel.fill();
}
tela.onclick = desenhaCirculo;
</script>

Percebi que contrário ao que o ditado diz, a ordem dos fatores não altera o produto. Hahaha

Abraços!

1 resposta

Adorei a piada Lucas kkkkk

É assim, na programação a gente so aprende batendo a cara, mandou bem aprendendo com os erros ^^