Información de un evento

Obtener información de un evento Javascript


Cuando se disparan ciertos eventos, hay casos en los que nos podría interesar obtener información relacionada con la naturaleza del evento en cuestión. Por ejemplo, si estamos escuchando un evento de tipo click de ratón, nos podría interesar saber:

  • ¿Con qué botón del ratón se ha hecho click?
  • ¿En qué punto concreto de la pantalla se ha hecho click?
  • ¿Se estaba pulsando la tecla CTRL mientras se hacía click?

Estos podrían ser algunos detalles que nos interesaría obtener de un evento. Vamos a analizar como hacerlo.

El objeto Event

Hasta ahora, al trabajar con addEventListener(), hemos indicado como segundo parámetro de la función, una arrow function sin parámetros. Sin embargo, podemos definir un parámetro (con el nombre que queramos, por ejemplo, event) que nos va a proporcionar información interesante sobre el evento:

const button = document.querySelector("button");

button.addEventListener("click", (event) => {
  console.log(event);   // PointerEvent
});

Observa que simplemente nos muestra que el event definido es un objeto PointerEvent (que a su vez, está basado en Event). Esto ocurre porque los navegadores consideran que los eventos click se realizan con dispositivos apuntadores (generalmente, un ratón).

Veamos que contiene el objeto PointerEvent de nuestro ejemplo anterior:

// Objeto PointerEvent
{
  type: "click",         // Nombre del evento
  target: button,        // Referencia al elemento que disparó el evento
  currentTarget: button, // Referencia al elemento que maneja el evento
  pointerType: "mouse"   // Tipo de dispositivo
  ctrlKey: false,        // ¿La tecla CTRL estaba presionada?
  altKey: false,         // ¿La tecla ALT estaba presionada?
  shiftKey: false,       // ¿La tecla SHIFT estaba presionada?
  clientX: 43,           // Posición en eje X donde se hizo click
  clientY: 16,           // Posición en eje Y donde se hizo click
  detail: 1,             // Contador de veces que se ha hecho click
  ...                    // Otros...
}

Ten en cuenta que en este caso, se trata de un objeto PointerEvent porque el evento que estamos escuchando es un evento click de un dispositivo que permite apuntar. Sin embargo, si utilizaramos otro evento, posiblemente obtendríamos un objeto diferente.

Propiedades del evento

Veamos algunas de la propiedades comunes, que están disponibles en cualquier tipo de evento. Ampliemos un poco la escucha del evento anterior, donde vamos a observar el contenido de cada una de las siguientes propiedades básicas:

const button = document.querySelector("button");

button.addEventListener("click", (event) => {
  const { type, timeStamp, isTrusted } = event;
  console.log({ type, timeStamp, isTrusted });
});

Como se puede ver, desestructuramos las tres propiedades siguientes del objeto event y las mostramos a través de una sentencia console.log(), de modo que podamos ver su contenido.

PropiedadDescripción
.typeIndica el tipo de evento en cuestión.
.timeStampHora en milisegundos en la que se creó el evento.
.isTrustedIndica si es un evento real del navegador o uno enviado manualmente con .dispatchEvent().

Analicemos cada una de ellas.

Tipo de evento

Mediante la propiedad .type podemos obtener el tipo de evento. Esto es, simplemente, el nombre del evento con el que escuchamos en el .addEventListener(). Más adelante, veremos que podemos crear nuestros propios CustomEvents o eventos personalizados, en cuyo caso, nos devolvería el nombre que le pusimos.

En el ejemplo inicial de este artículo estabamos escuchando un evento nativo donde type sería click.

Hora del evento

La propiedad .timeStamp devuelve un donde tenemos el número de milisegundos transcurridos desde que se creó el evento. Generalmente, para que esto sea sencillo de gestionar, podemos hacer lo siguiente utilizando la API de Fechas de Javascript:

const currentTime = new Date().getTime();
const eventTime = new Date(currentTime - event.timeStamp);

Observa que en la constante currentTime tenemos el timeStamp de la fecha actual, es decir, el número de milisegundos transcurridos desde el 01/01/1970. A ese número de milisegundos, le restaremos el número de milisegundos desde que se creó el evento, y de esta forma, obtendremos justo el momento exacto en el que que se creó.

Evento de confianza

Se denomina un evento de confianza al evento que ha lanzado el navegador por una acción del usuario, ya que un desarrollador puede falsear y crear eventos para simular una acción del usuario. La propiedad .isTrusted sirve precisamente para diferenciar uno de otro.

Mediante la propiedad .isTrusted a true podemos saber si el evento en cuestión que estamos examinando es un evento real que ha surgido de una acción del usuario, o de lo contrario, ha devuelto false y es un evento que ha sido emitido mediante código con un .dispatchEvent().

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev