๐ Benvenuto nella Lezione 9!
Inizia il Modulo 3! ๐ Finora ogni istruzione veniva eseguita una volta sola. Ma se devi creare 100 bottoni, 12 foto o una tabellina da 1 a 10, non vorrai scrivere 100 righe quasi uguali!
Un ciclo ripete un blocco di codice tutte le volte che serve. Tu scrivi la regola, il computer fa il lavoro noioso.
In questa lezione userai i cicli per costruire la pagina: griglie, elenchi, tabelle e una galleria di foto completa. ๐ผ๏ธ
๐ฏ Cosa Imparerai
- โ
Le tre parti del ciclo
for - โ Seguire un ciclo giro per giro
- โ
Creare elementi HTML con
createElementeappend - โ
Costruire HTML con una stringa e
innerHTML - โ
while,breakecontinue - โ Progetto: galleria di foto con filtri
๐ฎ Dove Si Usano i Cicli?
Ogni volta che una pagina mostra tanti elementi simili, dietro c'รจ quasi sempre un ciclo:
- ๐ Negozi online: la griglia dei prodotti
- ๐ธ Instagram: le foto del profilo
- ๐ฌ Chat: l'elenco dei messaggi
- ๐ Calendari: i giorni del mese
- ๐ฎ Giochi: le caselle di una griglia
๐ Demo: Generatore di Quadrati
Scegli quanti quadrati vuoi e premi Genera: un ciclo li crea uno alla volta, ognuno con il suo numero e il suo colore.
๐ค Come Funziona?
Tutto il lavoro lo fanno queste poche righe:
for (let i = 1; i <= 12; i++) {
const quadrato = document.createElement('div');
quadrato.textContent = i;
griglia.append(quadrato);
}
Con 12 o con 60 quadrati il codice รจ lo stesso: cambia solo il numero dopo <=.
๐ Il Ciclo For: le Tre Parti
Il for si usa quando sai quante volte ripetere. Tra le parentesi ci sono tre parti separate da punto e virgola:
for (let i = 1; i <= 5; i++) {
console.log('Giro numero ' + i);
}
// Giro numero 1, Giro numero 2, ... Giro numero 5
Crea il contatore. Viene eseguita una volta sola, all'inizio.
Controllata prima di ogni giro: se รจ vera si entra, se รจ falsa il ciclo finisce.
Eseguito alla fine di ogni giro: aumenta il contatore di 1.
๐ข Prova: il For al Rallentatore
Premi Passo โถ per eseguire il ciclo un'istruzione alla volta e guarda come cambia i.
Premi ยซPassoยป per iniziare.
Contare in Altri Modi
// All'indietro: 10, 9, 8 ... 1
for (let i = 10; i >= 1; i--) { console.log(i); }
// Di due in due: 0, 2, 4 ... 20
for (let i = 0; i <= 20; i += 2) { console.log(i); }
// Accumulare: la somma da 1 a 100
let somma = 0;
for (let i = 1; i <= 100; i++) {
somma += i;
}
console.log(somma); // 5050
โ ๏ธ Attenzione all'Ultimo Giro
i < 5si ferma a 4;i <= 5arriva a 5: controlla sempre il primo e l'ultimo valore.- La variabile che accumula (come
somma) va creata prima del ciclo, altrimenti riparte da zero a ogni giro.
๐งฑ Creare HTML con i Cicli
Nelle lezioni precedenti hai modificato elementi che esistevano giร . Con i cicli puoi crearne di nuovi. Ci sono due modi.
Modo 1: createElement e append
const lista = document.querySelector('#lista');
for (let i = 1; i <= 5; i++) {
const voce = document.createElement('li'); // 1. crea l'elemento
voce.textContent = `Elemento ${i}`; // 2. riempilo
voce.classList.add('voce'); // 3. dagli uno stile
lista.append(voce); // 4. mettilo nella pagina
}
Modo 2: una stringa di HTML
let html = '';
for (let i = 1; i <= 5; i++) {
html += `<li class="voce">Elemento ${i}</li>`; // aggiungi un pezzo alla stringa
}
lista.innerHTML = html; // una sola scrittura nella pagina, alla fine
| Criterio | createElement | Stringa + innerHTML |
|---|---|---|
| Leggibilitร | Piรน righe, ma ogni passo รจ chiaro | โ Compatto, sembra HTML |
| Eventi | โ
Puoi aggiungere subito addEventListener | Gli eventi vanno aggiunti dopo |
| Testo dell'utente | โ
textContent รจ sempre sicuro | Attenzione: l'HTML scritto dall'utente verrebbe eseguito |
๐ Regola Pratica
Per gli esercizi va bene la stringa con innerHTML. Quando un elemento deve reagire ai click, o il testo arriva da un input dell'utente, usa createElement.
โ ๏ธ Errore Classico
Scrivere lista.innerHTML = ... dentro il ciclo con = invece di +=: a ogni giro cancelli quello che c'era e alla fine resta solo l'ultimo elemento!
โพ๏ธ While, Break e Continue
Il while ("finchรฉ") si usa quando non sai quante volte ripetere: continua finchรฉ la condizione resta vera.
// Lancia un dado finchรฉ non esce 6
let lanci = 0;
let dado = 0;
while (dado !== 6) {
dado = Math.floor(Math.random() * 6) + 1;
lanci++;
}
console.log(`Ci sono voluti ${lanci} lanci`);
Break e Continue
// break: esce subito dal ciclo
for (let i = 1; i <= 100; i++) {
if (i * i > 50) {
console.log('Primo quadrato oltre 50: ' + i); // 8
break;
}
}
// continue: salta il resto del giro e passa al successivo
for (let i = 1; i <= 10; i++) {
if (i % 3 === 0) continue; // salta 3, 6, 9
console.log(i);
}
| Situazione | Ciclo giusto |
|---|---|
| So quante volte ripetere (12 quadrati, da 1 a 10โฆ) | for |
| Ripeto finchรฉ succede qualcosa (esce 6, l'utente indovinaโฆ) | while |
| Come while, ma almeno una volta | do ... while |
โ ๏ธ Il Ciclo Infinito
Se dentro il while niente cambia la condizione, il ciclo non finisce mai e la scheda del browser si blocca. Controlla sempre che a ogni giro qualcosa si avvicini alla fine (qui: dado cambia a ogni lancio).
โ๏ธ Esercizio Guidato: Generatore di Tabelline
L'utente sceglie un numero e il programma crea la sua tabellina da 1 a 10, una riga alla volta.
๐ Cosa Devi Fare
- Seleziona l'input, il bottone e il contenitore delle righe
- Aggiungi un evento click al bottone
- Leggi il numero e convertilo con
Number() - Svuota il contenitore
- Con un
forda 1 a 10 crea una riga per ogni moltiplicazione - Bonus: dai la classe
parialle righe con risultato pari
๐ Struttura HTML da Usare
<input id="tabNumero" type="number" value="7">
<button id="btnTabellina">Crea tabellina</button>
<div id="tabRighe"></div>
#tabNumeroโ Il numero scelto#btnTabellinaโ Bottone che crea la tabellina#tabRigheโ Contenitore dove aggiungere le righe (classe CSS per ogni riga:riga-tab)
โ๏ธ Tabellina
๐ผ๏ธ Progetto Finale: Galleria Foto Dinamica
ร il momento del progetto vero! ๐ธ
Le "foto" sono descritte in un elenco giร pronto nel codice. Tu scrivi i cicli che:
- โ creano una scheda per ogni foto
- โ mostrano solo le foto della categoria scelta
- โ contano quante foto sono visibili
- โ evidenziano le foto preferite โญ
๐ Un'Anteprima della Prossima Lezione
Le foto sono in un array, cioรจ un elenco: foto[0] รจ la prima, foto[1] la seconda e foto.length dice quante sono. Gli array li vedrai bene nella lezione 10; qui ti basta sapere che con for (let i = 0; i < foto.length; i++) li scorri tutti, partendo da 0.
๐ฏ Obiettivi del Progetto
- โ
Funzione
mostraGalleria(categoria)che svuota e ricrea la galleria - โ
Dentro un
forsulle foto,continuesalta quelle di un'altra categoria - โ Un contatore dice quante foto sono state mostrate
- โ I bottoni dei filtri chiamano la funzione con la categoria giusta
๐ Riferimento Elementi HTML
<!-- Filtri: data-categoria dice quale categoria mostrare -->
<button class="filtro" data-categoria="tutte">Tutte</button>
<button class="filtro" data-categoria="natura">Natura</button>
<!-- ... cittร , animali, cibo -->
<div id="galleria"></div> <!-- qui vanno le schede -->
<div id="galleriaConta"></div> <!-- "N foto" -->
foto-cardโ la scheda; conpreferitaha il bordo doratofoto-immagineโ il riquadro colorato con l'emoji (lo sfondo si imposta constyle.background)foto-titoloโ il titolo sotto l'immaginefiltro attivoโ il bottone del filtro selezionato
๐ธ La Galleria Live
๐ป Completa il Codice della Galleria
๐ฏ Conclusione: Sei un Loop Master!
โ Recap: Cosa Hai Imparato
- โ
Il
fore le sue tre parti: partenza, condizione, passo - โ Contare in avanti, all'indietro e a salti; accumulare una somma
- โ
Creare elementi con
createElement+appendoppure con una stringa einnerHTML - โ
whilequando non sai quante volte ripetere,breakecontinue - โ Una galleria completa con filtri e contatore!
๐ Challenge: Vai Oltre!
Migliora la galleria:
- โญ Solo preferite: un filtro che mostra solo le foto con
preferita: true - ๐ Ricerca: un input che mostra solo i titoli che contengono il testo scritto (
includes) - ๐ข Statistiche: con un ciclo conta quante foto ci sono per ogni categoria e mostralo sui bottoni
- ๐จ Scacchiera: con due cicli uno dentro l'altro crea una scacchiera 8ร8 di quadrati bianchi e neri