Tema 3. Eventos (I)
Tema 3. Eventos (I)
EVENTOS (I)
Un evento es una acción que ocurre sobre algún elemento HTML, como hacer clic en un botón,
mover el mouse sobre una imagen, presionar una tecla, etc. Existen muchos pos de eventos en
HTML y JavaScript, como eventos de ratón (clic, desplazamiento, etc.), eventos de teclado, eventos
de formulario (envío de formularios), eventos de carga de página, eventos de temporizador y
muchos más.
Aquí, resulta claves “escuchar eventos”, es decir, se puede escuchar eventos que están asociados a
elementos HTML para responder a ellos, esto se hace generalmente con JavaScript:
En el ejemplo anterior, se u liza una función llamada “manejadora de eventos”, que (tal y como
cabe esperar) se ejecutan cuando ocurre el evento.
Sintaxis:
elemento.addEventListener(evento, función, useCapture);
La diferencia entre `func on(event)` y `()` en los manejadores de eventos de JavaScript radica en
cómo se maneja el objeto de evento y cuándo se pasa como argumento.
ti
ti
ti
ti
ti
ti
ti
1. func on(event): Cuando de nes un manejador de eventos como una función con un
argumento, llamado `event` o cualquier otro nombre, estás permi endo que el objeto de evento
se pase como un argumento a la función. Esto es ú l cuando necesitas acceder a propiedades o
información especí ca del evento dentro de la función. Por ejemplo:
En este caso, `event` es un objeto que con ene información sobre el evento de clic, y puedes
acceder a sus propiedades, como `target` para obtener el elemento que desencadenó el evento, o
`clientX` y `clientY` para obtener las coordenadas del clic.
});
1. `target`: Hace referencia al elemento en el cual se originó el evento. Es ú l para iden car cuál
elemento desencadenó el evento.
EJERCICIO A: Muestra un mensaje que indica el elemento en el que se hizo clic dentro de un
contenedor. Agrega tres botones dentro de un contenedor. Cuando se hace clic en uno de los
botones, se dispara el evento de clic en el contenedor. Usamos la propiedad `target` para
veri car si el elemento en el que se hizo clic es un botón, y luego mostramos un mensaje que
indica en cuál de los botones hiciste clic según su ID.
2. `type`: Indica el po de evento que se produjo, como "click", "mouseover", "keydown", etc.
EJERCICIO B: Programa una web que muestre en un alert el po de evento que se produce al
pulsar cualquiera de los 3 botones que ene que tener el si o. Para escuchar este po de
eventos u liza container.addEventListener("click", func on(event) { …}
fi
ti
ti
ti
fi
fi
ti
ti
ti
ti
ti
ti
ti
ti
ti
ti
ti
ti
fi
ti
3. `preventDefault()`: Un método que permite prevenir el comportamiento predeterminado
asociado al evento. Por ejemplo, evitar que un enlace navegue a una URL.
Prevenir comportamiento predeterminado:
• Para hacer esto, puedes u lizar el método preventDefault() del objeto Evento en tu
manejador de eventos.
4. `stopPropaga on()`: Un método que de ene la propagación del evento a través del modelo de
eventos de burbujeo o captura. Ú l para controlar cómo se manejan los eventos en elementos
secundarios y padres.
EJERCICIO C: Crea una página web que contenga una lista de elementos (<li>) y un párrafo
vacío. Al hacer clic en cualquier elemento de la lista, se debe mostrar un mensaje en el párrafo
que indique en cuál de los elementos de la lista se hizo clic, y al mismo empo, se mostrará un
mensaje de alert indicando "Hiciste clic en la lista”.
Sin embargo, en la lista, hay un elemento especial que ene un comportamiento diferente. Al
hacer clic en ese elemento, se debe mostrar un mensaje en el párrafo que indique "Hiciste clic en
el elemento especial," pero no se debe mostrar el mensaje "Hiciste clic en la lista" en el alert.
ti
ti
ti
ti
ti
ti
ti
5. `keyCode` y `key`: Propiedades asociadas a eventos de teclado que indican la tecla presionada y
su código respec vamente.
6. `clientX` y `clientY`: Propiedades que proporcionan las coordenadas (en píxeles) del puntero del
ratón en la ventana.
EJERCICIO E: En este caso, cuando se mueva del ratón sobre el contenedor, las coordenadas X e Y
se muestran en la pantalla y el color de fondo del div cambia en función de la posición del cursor.
U liza:
container.addEventListener("mousemove", func on(event) {
const x = event.clientX - container.getBoundingClientRect().le ;
const y = event.clientY - container.getBoundingClientRect().top;
getBoundingClientRect() se u liza para obtener la posición y el tamaño de un elemento en relación con la ventana
grá ca o el área de visualización. En este caso, getBoundingClientRect().le se usa para obtener la distancia
horizontal entre el borde izquierdo del elemento y el borde izquierdo de la ventana grá ca. Se resta esta distancia a
la coordenada X absoluta del evento del ratón (event.clientX) para calcular la posición rela va del ratón dentro del
elemento.
ti
fi
ti
fl
fl
ti
ti
ft
ft
fi
ti
2. `()`: En algunos casos, puedes de nir un manejador de eventos como una función sin
argumentos (`()`). Esto se usa cuando no necesitas acceder directamente a las propiedades del
objeto de evento o no necesitas información especí ca sobre el evento. Simplemente quieres que
se ejecute una función cuando ocurra el evento:
Flujo de eventos:
1. Fase de captura
2. Obje vo
3. Burbujeo
La propagación de eventos es una forma de de nir el orden de los elementos cuando ocurre un
evento.
• Al burbujear, el evento del elemento más interno se maneja primero y luego el externo:
primero se maneja el evento de clic del elemento <p> y luego el evento de clic del elemento
<div> - true. De arriba abajo.
• Al capturar, el evento del elemento más externo se maneja primero y luego el interno: el
evento de clic del elemento <div> se manejará primero, luego el evento de clic del elemento
<p> - false. De abajo arriba
ti
fi
ti
fi
fi
fi
Ejercicio F: Escribe el código necesario para que al pulsar el botón este devuelva el mensaje
“Botón pulsado”, además al pulsar la caja azul (un div) también se debe devolver un mensaje
“Caja azul pulsada”, y nalmente, si se pulsa el contenedor blanco (un div), se muestra el
mensaje “Caja blanca pulsada).
Para evitar que se ejecute el mensaje de la caja blanca al pulsar el botón, u lizaríamos:
En esta línea, estamos veri cando si el obje vo del evento (el elemento que se hizo clic) no es igual
al botón con el id "myBu on".