1
resposta

[Dúvida] Por que não dá para usar o evento onmousemove na tag if?

A primeira "solução" que me veio a cabeça foi em uma linha de raciocínio baseada na que tivemos para conseguir inserir a tecla shift... usando a tag if. No entanto, o código simplismente não funcionou. Que alterações poderiam fazer essa linha de raciocínio ser viável para atribuir essa nova funcionalidade?

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

pincel.fillStyle = 'lightgray';
pincel.fillRect(0, 0, 600, 400);
var raio = 10;

function desenhaCirculo(evento) {

    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;

    if(evento.shiftKey && evento.altKey) {
        alert('Só aperte uma tecla por vez.')
    } else if (evento.altKey && raio - 5 >= 10){
        raio = raio - 5;
    } else if (evento.shiftKey && raio +10 <= 40) {
        raio = raio + 10;
    }

    pincel.fillStyle = cores[indiceCorAtual];
    pincel.beginPath();
    pincel.arc(x, y, raio, 0, 2 * 3.14);
    pincel.fill();;
}

//    FOI AQUI QUE EU TENTEI USAR A LINHA DE RACIOCÍNIO...
if (tela.onmousedown){
    tela.onmousemove = desenhaCirculo;
}
1 resposta

Oii, Brenda! Tudo bem por aí?

Agradeço por aguardar o nosso retorno.

O evento onmousemove não pode ser usado dentro da tag if porque ele é um evento.

Uma alternativa para usá-lo, seria adicionar declarar uma variável chamada desenha, que começa como false. Depois, vamos criar duas funções, a primeira habilitaDesenho e a segunda desabilitaDesenho e associar uma com cada um desses eventos, onmousemove e onmousemove , sendo que a primeira atribui true para a variável desenha e a segunda atribui false. Como a função desenhaCirculo depende da variável que foi alterada, conseguimos o resultado esperado:

  • Aqui está um exemplo de como você pode fazer isso:
<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 desenha = false;

    function desenhaCirculo(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();
        }

    }

    tela.onmousemove = desenhaCirculo;

    function habilitaDesenhar() {

        desenha = true;
    }

    function desabilitaDesenhar() {

        desenha = false;
    }

    tela.onmousedown = habilitaDesenhar;

    tela.onmouseup = desabilitaDesenhar;

</script>

Ao clicarmos com o botão esquerdo do mouse sem soltá-lo, a variável desenha será true. Enquanto você não soltar, ela continuará com esse valor, sendo assim, ao mover o mouse pela tela com o botão pressionado, a função desenhaCirculo desenhará o círculo a cada movimento que fizermos.

Realize o teste e me conte se o código rodou corretamente. Qualquer dúvida estarei à disposição para te ajudar.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!