Menu
Coddy logo textTech

Animare gli elementi durante lo scorrimento

Fa parte della sezione JavaScript in azione del percorso HTML di Coddy. Lezione 19 di 27.

A volte vogliamo che gli elementi si animino (dissolvenza in entrata, scorrimento in entrata, zoom, ecc.) quando entrano nell'area visibile durante lo scorrimento.
Spesso questo si fa verificando se l'elemento è visibile sullo schermo e poi aggiungendo una classe che attiva un'animazione o una transizione CSS.

Per prima cosa, creiamo un semplice elemento HTML:

<div class="animate-on-scroll">This element will animate when scrolled into view</div>

Successivamente, aggiungi il CSS per l’animazione:

.animate-on-scroll {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.5s ease, transform 0.5s ease;
}

.animate-on-scroll.visible {
  opacity: 1;
  transform: translateY(0);
}

Ora creiamo una funzione JavaScript per rilevare quando gli elementi entrano nell'area visibile. Poiché potremmo avere più elementi, li percorriamo con forEach e controlliamo la posizione di ciascun elemento rispetto alla finestra di visualizzazione.

function checkScroll() {
  const elements = document.querySelectorAll('.animate-on-scroll');
  
  elements.forEach(element => {
    // Ottieni la posizione dell'elemento rispetto all'area visibile
    const position = element.getBoundingClientRect();
    
    // Se l'elemento è nell'area visibile
    if(position.top < window.innerHeight) {
      element.classList.add('visible');
    }
  });
}

// Esegui durante lo scorrimento
window.addEventListener('scroll', checkScroll);

// Esegui una volta al caricamento della pagina
checkScroll();

Quando un elemento con la classe animate-on-scroll entra nell’area visibile, lo script aggiunge la classe visible, attivando l’animazione.

challenge icon

Sfida

Facile

All'interno del ciclo, crea un istruzione if.

  1. La condizione dovrebbe verificare se la posizione superiore dell'elemento è minore di window.innerHeight - 50.
  2. Se la condizione è vera, usa .classList.add("active") per aggiungere la classe active a quell'elemento.

In questo modo, ogni volta che un elemento entra nell'area visibile (entro 50px dal fondo dello schermo), apparirà gradualmente.

Provalo tu

<!DOCTYPE html>
<html>
<head>
  <title>Scroll Animation Example</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <header>
    <h1>Discover the Beauty of Nature</h1>
    <p>Scroll down to reveal the magic</p>
  </header>

  <div class="container">
    <div class="fade-in card">
      <h2>Mountains</h2>
      <p>Standing tall and timeless, mountains remind us of strength and stability.</p>
    </div>

    <div class="fade-in card">
      <h2>Forests</h2>
      <p>Forests are the lungs of our planet, offering peace and endless green beauty.</p>
    </div>

    <div class="fade-in card">
      <h2>Rivers</h2>
      <p>Calm or powerful, rivers flow endlessly, connecting life along their paths.</p>
    </div>

    <div class="fade-in card">
      <h2>Deserts</h2>
      <p>Silent and vast, deserts teach us resilience and the value of every drop of water.</p>
    </div>

    <div class="fade-in card">
      <h2>Oceans</h2>
      <p>The oceans cover most of our Earth, a mysterious world full of wonder and life.</p>
    </div>
  </div>

  <script src="script.js"></script>
</body>
</html>
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di JavaScript in azione

Esercitati da solo: Playground Web