Animowanie elementów podczas przewijania
Część sekcji JavaScript w praktyce ścieżki HTML w Coddy. Lekcja 19 z 27.
Czasami chcemy, aby elementy animowały się (zanikały, wsuwały się, powiększały itp.) gdy pojawiają się w obszarze widocznym podczas przewijania.
Często robi się to, sprawdzając, czy element jest widoczny na ekranie, a następnie dodając klasę, która uruchamia animację lub przejście CSS.
Najpierw utwórzmy prosty element HTML:
<div class="animate-on-scroll">This element will animate when scrolled into view</div>Następnie dodaj CSS dla animacji:
.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);
}Teraz utwórzmy funkcję JavaScript wykrywającą, kiedy elementy pojawiają się w widoku. Ponieważ możemy mieć wiele elementów, przechodzimy przez nie za pomocą forEach i sprawdzamy położenie każdego elementu względem obszaru widoku.
function checkScroll() {
const elements = document.querySelectorAll('.animate-on-scroll');
elements.forEach(element => {
// Pobierz pozycję elementu względem obszaru widocznego strony
const position = element.getBoundingClientRect();
// Jeśli element znajduje się w obszarze widocznym strony
if(position.top < window.innerHeight) {
element.classList.add('visible');
}
});
}
// Uruchom podczas przewijania
window.addEventListener('scroll', checkScroll);
// Uruchom raz po załadowaniu strony
checkScroll();Gdy element z klasą animate-on-scroll pojawi się w widocznym obszarze, skrypt dodaje klasę visible, uruchamiając animację.
Wyzwanie
ŁatwyWewnątrz pętli utwórz instrukcję if.
- Warunek powinien sprawdzać, czy pozycja górnej krawędzi elementu jest mniejsza niż
window.innerHeight - 50. - Jeśli warunek jest prawdziwy, użyj
.classList.add("active"), aby dodać klasęactivedo tego elementu.
Dzięki temu, gdy element pojawi się w polu widzenia (w odległości 50px od dołu ekranu), płynnie się rozjaśni.
Spróbuj swoich sił
<!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>Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji JavaScript w praktyce
1Interaktywność/komponenty UI
KartyAkordeon (rozwijanie/zwijanie)Modal (otwieranie/zamykanie)Menu rozwijane7Animacje i efekty
Przejścia CSSAnimowanie elementów podczas przewijaniaAnimacje po kliknięciu przycisku2Formularze i walidacja
Walidacja danych wejściowychNiestandardowe komunikaty o błędachPrzyciski przesyłaniaPoćwicz samodzielnie: Edytor online Web