0Pricing
HTML Academy · Lezione

Configurare animazioni legate allo scorrimento

Attivare animazioni CSS quando gli elementi entrano nella viewport

Configurare animazioni legate allo scorrimento è una lezione HTML Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento HTML Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso HTML Academy include 4 lezioni in totale.

L'obiettivo

Le animazioni collegate allo scorrimento vengono eseguite, messe in pausa o invertite in base alla visibilità dell'elemento. Esempi: una dissolvenza in entrata dell'hero quando una sezione entra nell'area visibile, un numero che aumenta quando è visibile o un effetto parallasse legato alla posizione di scorrimento. IntersectionObserver attiva le animazioni, mentre CSS o la Web Animations API le esegue.

Animazioni basate su trigger

Il modello più semplice consiste nell'aggiungere a un elemento una classe CSS che contiene l'animazione quando entra nel viewport. Nel callback dell'observer si utilizza entry.target.classList.add("in-view"); la classe definisce animation: fade-in 600ms forwards.

.fade-up { opacity: 0; transform: translateY(20px); }
.fade-up.in-view {
  animation: fadeUp 600ms cubic-bezier(.2,.8,.2,1) forwards;
}
@keyframes fadeUp {
  to { opacity: 1; transform: none; }
}

Configurazione dell'observer

Crei un observer condiviso, osservi ogni elemento con la classe trigger, aggiunga "in-view" quando si verifica l'intersezione e utilizzi unobserve per evitare di riattivare l'animazione. Per le animazioni eseguite una sola volta è tutto ciò che serve; per ripeterle quando l'elemento rientra nel viewport, non utilizzi unobserve e rimuova la classe all'uscita.

const observer = new IntersectionObserver((entries) => {
  for (const entry of entries) {
    if (entry.isIntersecting) {
      entry.target.classList.add("in-view");
      observer.unobserve(entry.target);
    }
  }
}, { threshold: 0.2 });
document.querySelectorAll(".fade-up").forEach((el) => observer.observe(el));

Effetti sfalsati

Per mostrare in sequenza gli elementi di un elenco, applichi a ciascun elemento un ritardo specifico tramite una proprietà personalizzata CSS: style="--delay: ${i * 100}ms"; l'animazione legge animation-delay: var(--delay). Gli elementi vengono animati a cascata quando l'elenco entra nell'area visibile.

Soglia per un'attivazione anticipata

threshold: 0.2 si attiva quando il 20% dell'elemento è visibile: di solito è un buon momento per le animazioni "in-view". threshold: 0 si attiva troppo presto, anche per un solo pixel, e l'effetto risulta brusco; threshold: 1 si attiva troppo tardi, quando l'elemento è completamente visibile, e l'effetto sembra ritardato.

Animazioni collegate e attivate dallo scorrimento

Le animazioni attivate dallo scorrimento vengono eseguite una volta quando si verifica l'intersezione, come descritto sopra. Le animazioni collegate allo scorrimento fanno avanzare il proprio progresso in sincronia con la posizione di scorrimento. L'approccio moderno consiste nelle animazioni CSS guidate dallo scorrimento (animation-timeline: scroll()), mentre IntersectionObserver rimane utile per l'ingresso e l'uscita dalle zone di attivazione.

Evitare il ricalcolo eccessivo del layout

Animi le proprietà che la GPU può trasformare in modo efficiente: transform e opacity. Eviti di animare top, left, width e height: attivano il layout a ogni frame e fanno scattare le animazioni legate allo scorrimento sui dispositivi di fascia media.

Rispettare la riduzione del movimento

Racchiuda le dichiarazioni delle animazioni in @media (prefers-reduced-motion: no-preference), così gli utenti che richiedono una riduzione del movimento, ad esempio per disturbi vestibolari o sensibilità, ricevono lo stato finale statico senza movimento. In modalità con movimento ridotto, le animazioni decorative dovrebbero essere disattivate completamente.

.fade-up { opacity: 1; transform: none; }
@media (prefers-reduced-motion: no-preference) {
  .fade-up { opacity: 0; transform: translateY(20px); }
  .fade-up.in-view { animation: fadeUp 600ms forwards; }
}

Strategia per le prestazioni

Utilizzi un solo observer condiviso, non uno per elemento. Utilizzi unobserve dopo l'attivazione di un'animazione eseguita una sola volta. Utilizzi will-change con parsimonia, solo sugli elementi attualmente animati, e lo rimuova al termine dell'animazione. Controlli il pannello Performance per individuare i frame persi.

Animazioni bidirezionali

Per le animazioni che devono invertirsi quando l'elemento esce dal viewport, non utilizzi unobserve. Nel callback, alterni la classe in base a isIntersecting: entry.target.classList.toggle("in-view", entry.isIntersecting). L'animazione procede in avanti all'ingresso e si inverte all'uscita.

Combinare con Web Animations API

Per le animazioni gestite da JS, sostituisca classList.add con entry.target.animate(keyframes, options). WAAPI restituisce un oggetto Animation che può essere messo in pausa, invertito o concatenato tramite promise: è più flessibile di CSS per le sequenze complesse.

Verifica delle conoscenze

Perché nelle animazioni collegate allo scorrimento è preferibile animare transform e opacity invece di top, left, width e height?

Riepilogo

Le animazioni collegate allo scorrimento combinano IntersectionObserver con classi di animazione CSS o WAAPI. Imposti uno stato nascosto, aggiunga "in-view" quando si verifica l'intersezione, animi transform e opacity, non top e left, rispetti prefers-reduced-motion e utilizzi proprietà personalizzate CSS per sfalsare le animazioni e ottenere rivelazioni a cascata. Per animazioni basate sull'intero progresso dello scorrimento, valuti le animazioni native guidate dallo scorrimento (animation-timeline: scroll()).

Domande Frequenti

La lezione «Configurare animazioni legate allo scorrimento» è gratuita?

Sì — il testo completo di «Configurare animazioni legate allo scorrimento» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso HTML Academy, passa a CoddyKit PRO. Il corso HTML Academy include 4 lezioni in totale.

Cosa imparerò in «Configurare animazioni legate allo scorrimento»?

Attivare animazioni CSS quando gli elementi entrano nella viewport Eserciti HTML Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare HTML Academy?

Non è richiesta alcuna esperienza precedente. HTML Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Configurare animazioni legate allo scorrimento»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione HTML Academy?

Sì. Ogni lezione HTML Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. IntersectionObserver API e soglie
  2. Caricamento differito con IntersectionObserver
  3. Implementare lo scorrimento infinito
  4. Configurare animazioni legate allo scorrimento
← Torna a HTML Academy