Eventos y Flujo en Programación Web: Capturing y Bubbling

Clase 15 de 27Curso de JavaScript: Manipulación del DOM

Contenido del curso

Manipulando Elementos del DOM

Creando un Administrador de Tareas

Resumen

Comprender cómo funcionan los eventos en JavaScript es fundamental para crear páginas web dinámicas e interactivas. Cada vez que un usuario hace clic, presiona una tecla o envía un formulario, se dispara un evento que permite que nuestro código responda de forma específica. A continuación se explica qué son los eventos, sus tipos principales y el flujo completo que recorren dentro del navegador.

¿Qué es un evento y por qué es tan importante en JavaScript?

Un evento es cualquier acción o suceso que ocurre en el navegador (o en un servidor) y que nuestro código puede detectar para reaccionar ante él [0:03]. Ocultar un elemento, cambiar un texto, modificar una imagen o enviar un formulario son ejemplos de acciones que se ejecutan como respuesta a un evento. Sin eventos, las páginas serían completamente estáticas.

Para "escuchar" estos sucesos en el navegador se utiliza el método addEventListener [0:47]. Este método se puede traducir literalmente como "agrega un escuchador de eventos". Su funcionamiento es sencillo:

  • Se asocia a un elemento del DOM.
  • Recibe el tipo de evento que queremos detectar.
  • Ejecuta una función (callback) cuando ese evento ocurre.

De esta forma, addEventListener actúa como un trigger: permanece atento hasta que el evento se dispara y entonces ejecuta la lógica que hayamos definido.

¿Cuáles son los tipos de eventos más comunes?

Existen múltiples categorías de eventos, cada una orientada a un tipo de interacción distinta [1:18]:

  • Eventos de mouse: clic, doble clic, movimiento del cursor, entre otros.
  • Eventos de teclado: se activan cuando el usuario presiona o suelta teclas específicas.
  • Eventos de ventana (window): relacionados con la carga de la página, el redimensionamiento o el desplazamiento del navegador.
  • Eventos de formulario: capturan acciones como rellenar campos de texto, seleccionar opciones o enviar datos.
  • Eventos táctiles (touch): diseñados para dispositivos móviles, detectan gestos como tocar o deslizar la pantalla.

Cada tipo permite que el código reaccione de manera precisa según la acción del usuario.

¿Cómo funciona el flujo de un evento en el DOM?

Entender el flujo de eventos es clave para controlar el comportamiento de elementos anidados [1:55]. Este flujo describe el recorrido que sigue un evento desde que se genera hasta que finaliza, y se divide en tres fases.

¿Qué es la fase de capturing?

La fase de capturing (captura) es el inicio del recorrido [2:12]. Cuando un usuario interactúa con un elemento, el evento no comienza en ese elemento, sino en el window object, que es el nodo más alto del DOM. Desde ahí, el evento desciende a través de cada elemento padre hasta alcanzar el elemento que lo originó.

¿Qué significa target y bubbling?

Cuando el evento llega al elemento que lo disparó, se alcanza la fase de target [2:45]. Este es el nodo exacto con el que el usuario interactuó y donde normalmente ejecutamos la lógica principal.

Pero el recorrido no termina ahí. Tras alcanzar el target, el evento vuelve a subir por el DOM hasta el window object. A esta fase ascendente se le conoce como bubbling (burbujeo) [3:05]. El nombre es muy descriptivo: el evento "burbujea" hacia arriba, pasando por cada elemento padre.

Esto tiene una consecuencia práctica muy útil:

  • Si un elemento padre necesita reaccionar al evento disparado por un hijo, puede hacerlo durante la fase de bubbling.
  • No es necesario asignar un listener directamente al hijo; el padre lo escuchará cuando el evento suba.

Por ejemplo, si hacemos clic en un botón que está dentro de un div, el evento primero baja desde el window hasta el botón (capturing), alcanza el botón (target) y luego sube de vuelta pasando por el div (bubbling) [3:30]. Si el div tiene un listener, podrá capturar ese evento y ejecutar un cambio: modificar texto, ajustar estilos CSS o cualquier otra acción.

¿Por qué es esencial dominar capturing y bubbling?

Conocer estas fases evita comportamientos inesperados en interfaces con múltiples elementos anidados. Al saber que el evento recorre todo el árbol del DOM, podemos decidir en qué momento exacto queremos interceptarlo y qué elementos deben responder. Esto nos da control total sobre el dinamismo de nuestras páginas.

Si estás practicando con eventos, prueba agregar listeners a elementos padres e hijos para observar cómo se propagan. Comparte tu experiencia o dudas en los comentarios.