Для реализации анимации блока при прокрутке страницы вам понадобятся HTML, CSS и JavaScript. Ниже приведен простой пример, который иллюстрирует, как можно анимировать блок при прокрутке, фиксируя его до завершения анимации.
### HTML
```html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="styles.css">
<title>Анимация при прокрутке</title>
</head>
<body>
<div class="container">
<div class="block" id="animatedBlock">Я анимируюсь при прокрутке!</div>
<div class="spacer"></div>
<div class="block">Блок 1</div>
<div class="spacer"></div>
<div class="block">Блок 2</div>
<div class="spacer"></div>
<div class="block">Блок 3</div>
<div class="spacer"></div>
<div class="block">Блок 4</div>
<div class="spacer"></div>
<!-- Добавьте больше блоков по необходимости -->
</div>
<script src="script.js"></script>
</body>
</html>
```
### CSS (styles.css)
```css
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
.container {
width: 80%;
margin: 0 auto;
}
.block {
padding: 20px;
background: lightblue;
margin: 10px 0;
transition: transform 0.5s ease-in-out;
}
.spacer {
height: 400px; /* Для создания пространства для прокрутки */
}
.animated {
transform: scale(1.2);
background: lightcoral; /* Цвет при анимации */
}
```
### JavaScript (script.js)
```javascript
document.addEventListener('scroll', function () {
const block = document.getElementById('animatedBlock');
const rect = block.getBoundingClientRect();
// Проверяем, виден ли блок на экране
if (rect.top < window.innerHeight && rect.bottom >= 0) {
// Добавляем класс для анимации
block.classList.add('animated');
// Блокируем дальнейшую анимацию, пока она не завершится
block.style.pointerEvents = 'none';
// Убираем класс анимации и восстанавливаем события после завершения анимации
setTimeout(() => {
block.classList.remove('animated');
block.style.pointerEvents = 'all';
}, 500); // Длительность анимации (в миллисекундах)
}
});
```
### Пояснение
1. **HTML**: Создается структура страницы с блоками, один из которых будет анимироваться.
2. **CSS**: Визуальные стили блоков и определение анимации. Класс `.animated` определяет, как будет выглядеть блок во время анимации.
3. **JavaScript**:
- Мы добавляем обработчик события прокрутки. Для каждого скролла проверяем, виден ли `animatedBlock`.
- Если он виден, добавляем класс `.animated`, который запускает анимацию.
- Чтобы избежать повторной анимации до завершения текущей, блокируем взаимодействие с помощью `pointerEvents`. После завершения анимации класс удаляется, и блок снова становится доступным для взаимодействия.
Такой способ позволит вам просто анимировать блок и ограничить возможность повторной анимации, пока предыдущая не завершилась. Вы можете настроить анимацию и длительность в зависимости от ваших потребностей.