JavaScript y el DOM: Eventos
Programación Orientada a Eventos
- Paradigma de programación
- La ejecución del programa va a estar determinada por los diferentes sucesos o eventos que ocurran, sean o no definidos por el usuario
Programación Orientada a Eventos
- La interacción con los sitios web y usuarios se basa fundamentalmente en eventos
- Cuando programamos en JS, gran parte del tiempo lo hacemos orientado a eventos (DOM, callbacks, Node)
Programación Orientada a Eventos
- En en paradigma estructurado/imperativo, nosotros definimos el flujo del programa; en la programación dirigida por eventos será el usuario (ó algún evento definido en el sistema) quien dirija el flujo
- Al comenzar la ejecución del programa, el programa no hará nada hasta que se produzca algún evento
Programación Orientada a Eventos
- Es la base de las Interfaces de Usuario (UIs)
Programación Orientada a Eventos
- Los sistemas de notificaciones también usan este paradigma
![](https://s3.amazonaws.com/media-p.slid.es/uploads/385983/images/6587121/notificacion.jpg)
Necesitamos saber qué tipo de evento nos interesa, sobre quién y qué vamos a hacer cuando suceda
¿Cómo hacemos para reaccionar a los eventos?
Event Listeners
- Necesitamos una forma de registrar los eventos que suceden, para reaccionar a ellos
- Los eventos se registran en el contexto de un objeto
- Agregamos event listeners a los elementos sobre los cuales queremos escuchar algún evento
target.addEventListener(type, listener[, options]);
.addEventListener
- El 1er parámetro es el tipo de evento que queremos registrar
- El 2do parámetro es un callback (event handler) que se va a ejecutar cuando se produzca el evento
- Puede tener parámetros opcionales
.removeEventListener
- Sirve para remover un listener registrado previamente sobre algún nodo
⚡️
const subtitles = document.querySelectorAll('h2');
subtitles.forEach(h2 => h2.addEventListener('click', e => {
console.log(e);
console.log(e.target);
}));
⚡️
const authors = document.querySelectorAll('#fantasy .author');
const complaints = ['Ouch!', 'HEY!', 'Mamá cortaste toda la loz!',
'SACÁ LA MANO DE AHI CARAJO!'];
const getRandomFrom = arr => arr[Math.floor(Math.random() * arr.length)];
authors.forEach(author => author.addEventListener('click', () => {
console.log(getRandomFrom(complaints))
}));
Propagación de eventos
- Los nodos también captan los eventos que suceden en sus descendientes y ejecutan los handlers
- El handler más específico se ejecuta primero
- Los eventos se propagan desde el nodo origen hacia la raíz del documento
Usar propagación de eventos para el ejercicio de eliminar nodos
Prevenir comportamientos por default
- Muchos eventos tienen un comportamiento default asociado (ej: clickear un link, click derecho, navegar usando las teclas de dirección, etc)
- Si queremos evitar que estos comportamientos sucedan, podemos usar el método .preventDefault()
Prevenir comportamientos por default
- A menos que tengamos un buen motivo para hacerlo, en lo posible evitamos usar este feature, porque estamos modificando el comportamiento esperado y puede no ser una buena UX
Javascript y el DOM: Eventos
By Nicolás Quiroz
Javascript y el DOM: Eventos
- 161