Event Propagation y Filtrado de Eventos en JavaScript
Clase 25 de 38 • Curso de Optimización Web
Contenido del curso
- 7

Entendiendo el Critical Rendering Path en Navegadores Web
11:11 - 8

Optimización de JavaScript para mejorar rendimiento web
10:53 - 9

Priorización de recursos CSS para mejorar rendimiento web
11:50 - 10

Optimización de Carga de Recursos con Preload, Prefetch y Preconnect
10:36 - 11

Optimización de Animaciones CSS para Mejorar el Renderizado
02:35
- 15

Optimización de Imágenes para Web: Formatos y Herramientas Efectivas
15:32 - 16

Optimización de Imágenes para Web: Uso de Tamaños y Formatos Adecuados
05:21 - 17

Comparación entre WebFonts y SVG: Ventajas y Desventajas
08:58 - 18

Lazy Loading de Imágenes: Técnicas y Estrategias Efectivas
10:14 - 19

Carga Adaptativa de Imágenes con Gatsby y Web API
04:13
- 20

Optimización de JavaScript para Producción Web
11:20 - 21

Análisis y Optimización de Bundles con Webpack
11:25 - 22

Optimización de Bundles en Proyectos Web con Webpack
17:14 - 23

Code Splitting con Webpack: Optimización de Bundles en Proyectos Web
06:31 - 24

Lazy Loading de Videos con JavaScript y Modales
21:44 - 25

Event Propagation y Filtrado de Eventos en JavaScript
17:24 - 26

Integración de Librerías en Proyectos JavaScript
14:58 - 27

Optimización de Carga de Modales con Lazy Loading en Webpack
13:25 - 28

Renderizado en Cliente vs. Servidor: Diferencias y Funciones
08:44 - 29

Implementación de Server Side Rendering en NodeJS
19:41 - 30

Optimización de Sitios con Static Site Generation
15:51
¿Cómo implementar un oyente de eventos eficiente para un modal?
En el desarrollo de aplicaciones web, el manejo eficiente de los eventos es clave para mejorar el rendimiento de la aplicación. Tradicionalmente, podríamos agregar un event listener a cada elemento que queramos que reaccione a un evento. Sin embargo, existe una técnica más óptima conocida como la propagación de eventos. Esta consiste en permitir que un solo elemento padre escuche los eventos de todos sus hijos, mejorando así el rendimiento.
¿Qué es la propagación de eventos?
La propagación de eventos es una técnica que permite que un evento generado en un elemento hijo se propague hacia arriba, hasta ser capturado por un elemento ancestro común. Esto es particularmente útil en marcos como React y Angular, donde el body del documento gestiona todos los eventos de sus elementos hijos. Esta técnica optimiza el manejo de eventos al reducir el número de listeners necesarios.
¿Cómo implementar la propagación de eventos?
Para implementarla en nuestra aplicación, en lugar de agregar un event listener a cada elemento a individualmente, podemos añadir un solo listener al body. Este manejará todos los clics en los hijos:
document.body.addEventListener('click', function(event) {
let tagName = event.target.tagName;
if (tagName !== 'IMG' && tagName !== 'A') {
return;
}
// Código adicional para manejar el clic si es un elemento <img> o <a>
});
¿Cómo filtrar eventos específicos?
Una vez integrado en el body, es crucial filtrar los eventos que realmente nos interesan. Utilizaremos las propiedades target y currentTarget de los eventos:
target: Elemento donde se originó el evento.currentTarget: Elemento donde se capturó el evento.
Si solo nos interesa el origen, debemos utilizar target. Filtraremos solo para los elementos deseados, como imágenes o enlaces:
if (!['IMG', 'A'].includes(event.target.tagName)) {
return;
}
¿Cómo extraer información del dataset?
La extracción de información adicional, como un video ID de un enlace de YouTube, se puede hacer mediante el uso de dataset. Los atributos data-* se utilizan para almacenar datos personalizados en los elementos HTML:
const videoID = event.target.dataset.videoId;
console.log(videoID);
¿Cómo refinar el código para un manejo más seguro?
Añadimos verificaciones para asegurar que solo interactuamos con elementos que posean la clase específica que necesitamos:
let link = event.target;
if (link && link.classList.contains('js-video-link')) {
// Manipulación del enlace
}
Al emplear estas técnicas, nuestro código se vuelve más eficiente y flexible, ajustándose mejor para futuras modificaciones. Con esta estructura optimizada, estamos listos para integrar librerías externas que requieran un manejo específico de los eventos.