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 eventoclick
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.
Propiedad | Descripción |
---|---|
.type | Indica el tipo de evento en cuestión. |
.timeStamp | Hora en milisegundos en la que se creó el evento. |
.isTrusted | Indica 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
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()
.