La gestió d'esdeveniments és una part fonamental de la programació web interactiva. Els esdeveniments permeten que el teu codi JavaScript reaccioni a les accions dels usuaris, com ara clics de botons, moviments del ratolí, tecles pressionades, i molt més. En aquesta secció, aprendrem com gestionar esdeveniments en JavaScript utilitzant el Model d'Objectes del Document (DOM).
Conceptes Clau
- Esdeveniments: Accions o successos que tenen lloc en el navegador, com ara clics, càrrega de pàgina, moviments del ratolí, etc.
- Listeners d'Esdeveniments: Funcions que s'executen en resposta a un esdeveniment específic.
- Propagació d'Esdeveniments: El procés pel qual un esdeveniment es mou a través del DOM. Inclou la fase de captura, la fase de destinació i la fase de bubbling.
Afegir Listeners d'Esdeveniments
addEventListener
La manera més comuna d'afegir un listener d'esdeveniments a un element del DOM és utilitzant el mètode addEventListener
. Aquest mètode permet associar una funció a un esdeveniment específic.
// Seleccionem l'element del DOM const button = document.querySelector('button'); // Afegim un listener d'esdeveniments per al clic button.addEventListener('click', function() { alert('Botó clicat!'); });
Exemple Pràctic
Imagina que tenim un botó en el nostre HTML:
Podem afegir un listener d'esdeveniments per mostrar un missatge quan el botó és clicat:
// Seleccionem el botó pel seu ID const myButton = document.getElementById('myButton'); // Afegim el listener d'esdeveniments myButton.addEventListener('click', function() { console.log('El botó ha estat clicat!'); });
Tipus Comuns d'Esdeveniments
Esdeveniments de Ratolí
click
: Quan l'usuari fa clic en un element.dblclick
: Quan l'usuari fa doble clic en un element.mouseover
: Quan el ratolí es mou sobre un element.mouseout
: Quan el ratolí es mou fora d'un element.
Esdeveniments de Teclat
keydown
: Quan una tecla és pressionada.keyup
: Quan una tecla és alliberada.keypress
: Quan una tecla és pressionada i alliberada.
Exemple d'Esdeveniments de Teclat
document.addEventListener('keydown', function(event) { console.log(`Tecla pressionada: ${event.key}`); });
Propagació d'Esdeveniments
Bubbling i Captura
Els esdeveniments en el DOM poden propagar-se de dues maneres:
- Bubbling: L'esdeveniment es propaga des de l'element més profund fins a l'element més extern.
- Captura: L'esdeveniment es propaga des de l'element més extern fins a l'element més profund.
Per defecte, els esdeveniments utilitzen el bubbling. Pots especificar la fase de captura passant un tercer paràmetre true
a addEventListener
.
// Bubbling (per defecte) element.addEventListener('click', function() { console.log('Bubbling'); }); // Captura element.addEventListener('click', function() { console.log('Captura'); }, true);
Exercicis Pràctics
Exercici 1: Canviar el Color de Fons
Crea un botó que canviï el color de fons de la pàgina quan és clicat.
const colorButton = document.getElementById('colorButton'); colorButton.addEventListener('click', function() { document.body.style.backgroundColor = 'lightblue'; });
Exercici 2: Comptador de Clics
Crea un botó que mostri el nombre de vegades que ha estat clicat.
const countButton = document.getElementById('countButton'); const clickCount = document.getElementById('clickCount'); let count = 0; countButton.addEventListener('click', function() { count++; clickCount.textContent = `Clics: ${count}`; });
Errors Comuns i Consells
- No Seleccionar Correctament l'Element: Assegura't que l'element existeix en el DOM abans d'afegir un listener d'esdeveniments.
- Oblidar-se de Treure Listeners: Si afegeixes listeners d'esdeveniments en elements que es creen i s'eliminen dinàmicament, assegura't de treure'ls per evitar fuites de memòria.
Resum
En aquesta secció, hem après com gestionar esdeveniments en JavaScript utilitzant addEventListener
. Hem vist exemples pràctics d'esdeveniments de ratolí i teclat, i hem explorat la propagació d'esdeveniments. També hem practicat amb exercicis per reforçar els conceptes apresos. Ara estàs preparat per crear aplicacions web més interactives i dinàmiques!
JavaScript: De Principiant a Avançat
Mòdul 1: Introducció a JavaScript
- Què és JavaScript?
- Configuració del Teu Entorn de Desenvolupament
- El Teu Primer Programa en JavaScript
- Sintaxi i Conceptes Bàsics de JavaScript
- Variables i Tipus de Dades
- Operadors Bàsics
Mòdul 2: Estructures de Control
- Declaracions Condicionals
- Bucles: for, while, do-while
- Declaracions Switch
- Gestió d'Errors amb try-catch
Mòdul 3: Funcions
- Definició i Crida de Funcions
- Expressions de Funció i Funcions Fletxa
- Paràmetres i Valors de Retorn
- Àmbit i Tancaments
- Funcions d'Ordre Superior
Mòdul 4: Objectes i Arrays
- Introducció als Objectes
- Mètodes d'Objecte i Paraula Clau 'this'
- Arrays: Conceptes Bàsics i Mètodes
- Iteració sobre Arrays
- Desestructuració d'Arrays
Mòdul 5: Objectes i Funcions Avançades
- Prototips i Herència
- Classes i Programació Orientada a Objectes
- Mòduls i Importació/Exportació
- JavaScript Asíncron: Callbacks
- Promeses i Async/Await
Mòdul 6: El Model d'Objectes del Document (DOM)
- Introducció al DOM
- Selecció i Manipulació d'Elements del DOM
- Gestió d'Esdeveniments
- Creació i Eliminació d'Elements del DOM
- Gestió i Validació de Formularis
Mòdul 7: APIs del Navegador i Temes Avançats
- Emmagatzematge Local i de Sessió
- Fetch API i AJAX
- WebSockets
- Service Workers i Aplicacions Web Progressives (PWAs)
- Introducció a WebAssembly
Mòdul 8: Proves i Depuració
- Depuració de JavaScript
- Proves Unitàries amb Jest
- Proves d'Integració
- Proves de Cap a Cap amb Cypress
Mòdul 9: Rendiment i Optimització
- Optimització del Rendiment de JavaScript
- Gestió de Memòria
- Manipulació Eficient del DOM
- Càrrega Per Mandat i Divisió de Codi
Mòdul 10: Frameworks i Llibreries de JavaScript
- Introducció a React
- Gestió d'Estat amb Redux
- Conceptes Bàsics de Vue.js
- Conceptes Bàsics d'Angular
- Triar el Framework Adequat