1
resposta

Como funciona o evento tela.offsetLeft??

Como funciona o evento.pageX - tela.offsetLeft, pois no fim do código é ele que chama a função que aciona o mouse. E no programa leDoTeclado esse evento não faz mais parte, e a tela não chama mais o evento, é chamado pelo document, então fiquei confusa.

1 resposta

Olá, Joicilene! Tudo bem?

Antes de tudo, peço desculpas pela demora em retornar!

Para que possamos descobrir a posição do mouse após um click, podemos coletar algumas informações que são geradas pelo evento onclick.

Durante o curso, foi desenvolvido um código que chama uma função assim que a tela for clicada, veja abaixo:

// código anterior omitido

function desenhaCirculo(evento) {
    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("posição do clique : " + x + ", " + y);
}

tela.onclick = desenhaCirculo; 

O onclick é o evento que estamos analisando, e é justamente ele que a função desenhaCirculo() recebe como parâmetro. Os eventos do Javascript, geralmente, possuem algumas propriedades, que podem ser passadas através de um ponto seguido de seu nome, alguns exemplos de propriedades são:

  • .pageX : verifica a posição horizontal do evento do mouse;
  • .pageY : verifica a posição vertical do evento do mouse.

Para evitar uma diferença de valores e apenas contabilizar o espaço da tela, removemos as distâncias do topo (com a propriedade offsetTop) e da esquerda (com a propriedade offsetLeft) da variável tela, que representa o espaço que estamos trabalhando da tag <canvas>:

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

Enquanto isso, no outro código abordado pelo instrutor, percebemos o uso do evento onkeydown, o qual está associado às teclas que pressionamos no teclado. Quem deve responder a esse evento não é mais a tela, mas sim o document, visto que estamos lidando diretamente com uma interação entre o usuário e o navegador.

O Document Object Model (DOM), também chamado de document é utilizado pelo nosso navegador para representar a página Web.

Assim que uma tecla é pressionada, o próprio document percebe isso e executa uma função específica que nós associamos ao evento onkeydown, como a leDoTeclado :

function leDoTeclado(evento) {
        if(evento.keyCode == cima) {
            y = y - taxa;
        } else if (evento.keyCode == baixo) {
            y = y + taxa;
        } else if (evento.keyCode == esquerda) {
            x = x - taxa;
        } else if (evento.keyCode == direita) {
            x = x + taxa;
        }
    }

   document.onkeydown = leDoTeclado;

Nesta função, pegamos o evento que ocorreu (tecla foi pressionada) e fazemos uma sequência de verificações a fim de encontrar qual tecla foi efetivamente pressionada. Quando descobrimos isso, alteramos os valores das variáveis x e y .

Nesse sentido, quando utilizamos tela.onclick e evento.pageX - tela.offsetLeft, estamos lidando com o comportamento da nossa tela de pintura e como ocorre a interação do usuário com ela. Por outro lado, quando trabalhamos com document.onkeydown, focamos em entender como ocorre a interação entre o teclado do usuário e o próprio navegador.


Para impulsionar ainda mais seus estudos e conhecer um pouco sobre o DOM, deixo como dica de leitura um artigo super interessante logo abaixo:

Caso tenha dúvidas após minha explicação ou ao longo dos seus estudos, sinta-se confortável para enviá-las ao fórum. Fico à disposição para te auxiliar no que for preciso.

Até mais e bons estudos, Joicilene!

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