Анимация элементов при прокрутке
Часть раздела JavaScript в действии путешествия по HTML на Coddy. Урок 19 из 27.
Иногда мы хотим, чтобы элементы анимировались (плавно появлялись, выезжали, увеличивались и т. д.) при появлении в области просмотра во время прокрутки.
Обычно для этого проверяют, виден ли элемент на экране, а затем добавляют класс, запускающий CSS-анимацию или переход.
Сначала создадим простой элемент HTML:
<div class="animate-on-scroll">This element will animate when scrolled into view</div>Далее добавь CSS для анимации:
.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);
}Теперь создадим функцию JavaScript для определения момента, когда элементы прокручиваются в область видимости. Поскольку элементов может быть несколько, мы перебираем их с помощью forEach и проверяем положение каждого элемента относительно области просмотра.
function checkScroll() {
const elements = document.querySelectorAll('.animate-on-scroll');
elements.forEach(element => {
// Получить положение элемента относительно области просмотра
const position = element.getBoundingClientRect();
// Если элемент находится в области просмотра
if(position.top < window.innerHeight) {
element.classList.add('visible');
}
});
}
// Запускать при прокрутке
window.addEventListener('scroll', checkScroll);
// Запустить один раз при загрузке страницы
checkScroll();Когда элемент с классом animate-on-scroll попадает в область просмотра, скрипт добавляет класс visible, запуская анимацию.
Задание
ЛегкоВнутри цикла создайте инструкцию if.
- Условие должно проверять: меньше ли верхняя позиция элемента, чем
window.innerHeight - 50. - Если условие истинно, используйте
.classList.add("active"), чтобы добавить к этому элементу классactive.
Таким образом, когда элемент появляется в области просмотра (на расстоянии не более 50px от нижнего края экрана), он будет плавно проявляться.
Попробуйте сами
<!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>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела JavaScript в действии
1Интерактивность/компоненты UI
ВкладкиАккордеон (развертывание/свертывание)Модальное окно (открытие/закрытие)Выпадающий список3Уведомления и обратная связь
Всплывающее сообщениеБаннеры с возможностью закрытияИндикаторы загрузкиПотренируйтесь самостоятельно: Песочница Web