Objetos de Evento en JavaScript: Manejo de Eventos del DOM

Objetos de Evento en JavaScript: Manejo de Eventos del DOM

Introducción

DOM - Document Object Model | aulas-programacao-web

Los objetos de evento en JavaScript son esenciales para controlar y responder a las interacciones del usuario en una página web. Cada vez que se desencadena un evento, como un clic o una tecla pulsada, se genera un objeto de evento que contiene información detallada sobre la acción. En este artículo, exploraremos qué es un objeto de evento, qué información proporciona y cómo usarlo para manipular eventos de manera eficiente en el DOM.

¿Qué es un Objeto de Evento?

Un objeto de evento es una instancia de la clase Event en JavaScript que representa cualquier evento que ocurre en el navegador. Este objeto contiene datos sobre el evento, incluyendo el tipo de evento, el elemento donde ocurrió, las coordenadas (en el caso de eventos de clic), y métodos para detener o modificar su comportamiento.

Cada vez que un evento se produce y un listener responde, se pasa automáticamente un objeto de evento a la función de ese listener, permitiendo que el desarrollador acceda a detalles específicos del evento.

Propiedades Clave del Objeto de Evento

Los objetos de evento en JavaScript vienen con una variedad de propiedades y métodos que nos permiten conocer información detallada y controlar la respuesta a un evento. A continuación, se describen algunas de las propiedades más importantes:

type:

    • Define el tipo de evento que se ha producido, como "click", "keydown", "mouseover", etc.
    • Ejemplo:
				
					document.addEventListener("click", function(event) {
  console.log(event.type); // Output: "click"
});
				
			

target:

  • Representa el elemento DOM en el que se originó el evento.
  • Ejemplo
				
					document.getElementById("myButton").addEventListener("click", function(event) {
  console.log(event.target); // Muestra el botón que disparó el evento.
});

				
			

currentTarget:

  • Muestra el elemento en el que se adjuntó el listener. Esto es útil en la delegación de eventos, donde el evento puede originarse en un elemento hijo pero ser manejado por el padre.
  • Ejemplo:
				
					document.getElementById("container").addEventListener("click", function(event) {
  console.log(event.currentTarget); // Muestra el contenedor, no el elemento específico que se hizo clic.
});
				
			

clientX y clientY:

  • Estas propiedades indican las coordenadas horizontales y verticales del puntero del mouse en el viewport en eventos de ratón como click o mousemove.
  • Ejemplo:
				
					document.addEventListener("click", function(event) {
  console.log(`Posición X: ${event.clientX}, Posición Y: ${event.clientY}`);
});
				
			

preventDefault():

  • Detiene el comportamiento predeterminado del evento, como la redirección de un enlace.
  • Ejemplo:
				
					document.querySelector("a").addEventListener("click", function(event) {
  event.preventDefault();
  console.log("Redirección evitada");
});

				
			

stopPropagation():

  • Evita que el evento se propague a través de la jerarquía del DOM, útil cuando no queremos que los eventos lleguen a los elementos padres.
  • Ejemplo:
				
					document.getElementById("inner").addEventListener("click", function(event) {
  event.stopPropagation();
  console.log("Propagación detenida en elemento interno");
});

				
			

key:

  • Para eventos de teclado, la propiedad key devuelve el valor de la tecla presionada.
  • Ejemplo:
				
					document.addEventListener("keydown", function(event) {
  console.log(`Tecla presionada: ${event.key}`);
});

				
			

Tipos de Objetos de Evento y Propiedades Especializadas

JavaScript cuenta con varios tipos de objetos de evento, cada uno con propiedades adicionales específicas para el tipo de interacción que representan. A continuación, se describen algunos tipos de eventos comunes:

Objeto MouseEvent

  • Representa eventos del ratón, como click, dblclick, mousedown, etc.
  • Propiedades adicionales: button, clientX, clientY, screenX, screenY, altKey, ctrlKey, shiftKey.
  • Ejemplo:
				
					document.addEventListener("click", function(event) {
  console.log(`Botón: ${event.button}, Coordenadas: (${event.clientX}, ${event.clientY})`);
});
				
			

Objeto KeyboardEvent

  • Representa eventos de teclado, como keydown, keyup, y keypress.
  • Propiedades adicionales: key, code, altKey, ctrlKey, shiftKey.
  • Ejemplo:
				
					document.addEventListener("keydown", function(event) {
  console.log(`Tecla: ${event.key}, Código: ${event.code}`);
});
				
			

Objeto TouchEvent

  • Representa eventos táctiles, como touchstart, touchmove, y touchend.
  • Propiedades adicionales: touches, targetTouches, changedTouches.
  • Ejemplo:
				
					document.addEventListener("touchstart", function(event) {
  console.log(`Número de toques: ${event.touches.length}`);
});

				
			

Objeto FocusEvent

  • Representa eventos de enfoque, como focus y blur.
  • Propiedad adicional: relatedTarget, que indica el elemento involucrado en el cambio de enfoque.
  • Ejemplo:
				
					document.getElementById("input").addEventListener("focus", function(event) {
  console.log("El campo de texto recibió el foco");
});
				
			

Ejemplo Práctico: Uso del Objeto de Evento para Delegación de Eventos

La delegación de eventos implica colocar un listener en un elemento contenedor en lugar de en cada uno de sus elementos hijos. Esto mejora el rendimiento al reducir la cantidad de listeners en la página.

				
					<div id="parentContainer">
  <button class="childBtn">Botón 1</button>
  <button class="childBtn">Botón 2</button>
  <button class="childBtn">Botón 3</button>
</div>

				
			
				
					document.getElementById("parentContainer").addEventListener("click", function(event) {
  if (event.target.classList.contains("childBtn")) {
    console.log(`Botón con texto "${event.target.textContent}" fue clicado.`);
  }
});

				
			

Buenas Prácticas para el Uso de Objetos de Evento

  1. Evitar stopPropagation excesivo: Detener la propagación en todos los eventos puede hacer que sea difícil controlar el flujo.
  2. Usar preventDefault únicamente cuando sea necesario: Solo usa preventDefault para evitar comportamientos predeterminados en casos específicos.
  3. Delegación de eventos para rendimiento: En listas grandes o elementos repetidos, utiliza un contenedor con un solo listener en lugar de muchos listeners en cada elemento.

Conclusión

Los objetos de evento en JavaScript ofrecen una gama de propiedades y métodos que permiten un control detallado de las interacciones en la página. Al comprender y utilizar estas propiedades y métodos, puedes manejar eventos de manera eficiente y optimizada en el DOM, proporcionando una mejor experiencia de usuario y facilitando el mantenimiento del código.

Links de referencia:

Facebook
X
LinkedIn
Reddit
Pinterest
Threads

Post relacionados

Post recientes

Search