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

o que esta acontecendo ??

<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 cores = ['blue','red','green'];
    var proximaCor = 0


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

        pincel.fillStyle = cores[proximaCor];
        pincel.beginPath();

        if(evento.shiftKey && raio <= 40) {
            raio = raio + 10;

        }else{ raio = 40};

        if(evento.altKey && raio >= 10) {
            raio = raio - 5;
        }else{ raio = 10};

        pincel.arc(x, y, raio, 0, 2 * 3.14);       
        pincel.fill();
        console.log(x + ',' + y);
    }

    function mudaCor() {
        proximaCor++
        if (proximaCor >= cores.length){
        proximaCor = 0

        }
        alert('cor alterada para ' + cores[proximaCor] );
        console.log(proximaCor)
        return false;
    }

    tela.onclick = desenhaCirculo;
    tela.oncontextmenu = mudaCor;
</script>

eu resolvi fazendo de outra forma, mas será que alguém pode me explicar porque fazendo assim o shift não funciona e o alt aumenta a bolinha ?!

3 respostas

Boa tarde Ângelo. O que está acontecendo é que seu código está com dois problemas na estrutura dele. Na string 23 e na string 27, dentro da função desenhaCirculo, você colocou dois else's que estão garantindo esse problema de funcionamento no shift e no alt. Com o else{ raio = 40}, ao pressionar alt, você não apenas ativa o comando para o altKey como também ativa o else, que sempre deixa o raio da sua bolinha em 40. Da mesma forma, no else{ raio = 10}, ao pressionar shift, ele sempre mantém o raio da sua bolinha em 10. O que você pode fazer para reparar o seu código é retirá-los. Uma dica também que eu dou é alterar a string 25 e mudar if(evento.altKey && raio >= 10) para if(evento.altKey && raio > 10), pois assim seu raio mínimo será 10, e não 5. Anexarei seu código, com os erros que visualizei, bem como o código reparado.

<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 cores = ['blue','red','green'];
    var proximaCor = 0


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

        pincel.fillStyle = cores[proximaCor];
        pincel.beginPath();

        if(evento.shiftKey && raio <= 40) {
            raio = raio + 10;

        } else if(evento.altKey && raio > 10) { 

            raio = raio - 5;
        }

        pincel.arc(x, y, raio, 0, 2 * 3.14);       
        pincel.fill();
        console.log(x + ',' + y);
    }

    function mudaCor() {
        proximaCor++
        if (proximaCor >= cores.length){
        proximaCor = 0

        }
        alert('cor alterada para ' + cores[proximaCor] );
        console.log(proximaCor)
        return false;
    }

    tela.onclick = desenhaCirculo;
    tela.oncontextmenu = mudaCor;
</script>
<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 cores = ['blue','red','green'];
    var proximaCor = 0


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

        pincel.fillStyle = cores[proximaCor];
        pincel.beginPath();

        if(evento.shiftKey && raio <= 40) {
            raio = raio + 10;

        }else{ raio = 40};  //o problema do exercício está nessa string. Esse else não deve existir.

        if(evento.altKey && raio >= 10) {  //nessa string o raio deve ser maior que 10, pois se for raio >= 10, seu raio mínimo será 5
            raio = raio - 5;
        }else{ raio = 10};  //o problem do exercício está também nesse else.

        pincel.arc(x, y, raio, 0, 2 * 3.14);       
        pincel.fill();
        console.log(x + ',' + y);
    }

    function mudaCor() {
        proximaCor++
        if (proximaCor >= cores.length){
        proximaCor = 0

        }
        alert('cor alterada para ' + cores[proximaCor] );
        console.log(proximaCor)
        return false;
    }

    tela.onclick = desenhaCirculo;
    tela.oncontextmenu = mudaCor;
</script>

Pelo que entendi,e agora esta começando a parecer mais claro,eu dei varias condições pensando que seriam avaliadas isoladamente, de acordo com a tecla que eu pressionasse, mas todas são avaliadas, quando a função é ativada. Ou seja: Ao pressionar shift ele avalia o primeiro if, como ele preenche os requisitos ele não avalia o else seguinte. depois ele avalia o segundo if que não preenche os requisitos e por isso avalia o segundo else que deixa ele com tamanho 10. e o contrario ao pressionar alt. fazendo com que ao percepcionar shift ele sempre fique com 10 e com alt sempre fique com 40. entendi correctamente?

solução!

Bom dia, Ângelo. Desculpe pela demora da resposta. Sim, perfeitamente. Você entendeu qual foi o erro. É exatamente esse. Quando um if é ativado, o else do outro if também é ativado, fazendo com que seu código entre em conflito. Precisando de ajuda estou à disposição.