Как создать последовательную анимацию, состоящую из нескольких этапов?

Как можно анимировать блок фиксированного размера, в котором размещены три одинаковые по высоте картинки, так чтобы каждая картинка отображалась по очереди в течение 3 секунд, а затем переход к следующей происходил за примерно 0,3 секунды, и в конце анимации блок прокручивался вверх к первой картинке?
  • 31 октября 2024 г. 22:32
Ответы на вопрос 1
Для создания последовательной анимации, где три картинки отображаются по очереди, можно использовать CSS-анимацию и JavaScript для управления процессом. Ниже приведен пример реализации такого подхода:

1. **HTML структура**:
```html
<div class="image-container">
    <div class="image" id="image1"></div>
    <div class="image" id="image2"></div>
    <div class="image" id="image3"></div>
</div>
```

2. **CSS стили**:
```css
.image-container {
    width: 300px; /* Задайте необходимую ширину */
    height: 200px; /* Задайте необходимую высоту */
    overflow: hidden;
    position: relative;
}

.image {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    background-size: cover;
    background-position: center;
}

#image1 {
    background-image: url('image1.jpg'); /* Укажите путь к первой картинке */
}

#image2 {
    background-image: url('image2.jpg'); /* Укажите путь ко второй картинке */
    display: none;
}

#image3 {
    background-image: url('image3.jpg'); /* Укажите путь к третьей картинке */
    display: none;
}
```

3. **JavaScript для анимации**:
```javascript
let currentIndex = 0;
const images = document.querySelectorAll('.image');
const totalImages = images.length;
const displayTime = 3000; // 3 секунды
const transitionTime = 300; // 0.3 секунды

function showNextImage() {
    images[currentIndex].style.display = 'none'; // Скрываем текущую картинку
    currentIndex = (currentIndex + 1) % totalImages; // Переходим к следующей

    images[currentIndex].style.display = 'block'; // Показываем следующую картинку

    setTimeout(() => {
        // После задержки переключаемся на следующую
        showNextImage();
    }, displayTime);
}

// Начинаем анимацию
showNextImage();

// Прокрутка блока вверх к первой картинке после завершения анимации
setTimeout(() => {
    const container = document.querySelector('.image-container');
    container.scrollTop = 0; // Прокручиваем вверх к первой картинке
}, (displayTime + transitionTime) * totalImages);
```

### Объяснение кода:
- **HTML**: Создается контейнер для изображений, в котором каждая картинка помещена в отдельный `div`.
- **CSS**: Устанавливаются размеры и фон для изображений. Только одно изображение отображается в данный момент, остальные скрыты.
- **JavaScript**: 
    - Используется функция `showNextImage()`, которая скрывает текущую картинку и показывает следующую.
    - Для удержания текущей картинки на экране используется таймер.
    - После отображения всех изображений блок прокручивается к первой картинке.

### Заметки:
- Обязательно подмените `url('image1.jpg')` и остальные пути на реальные источники ваших изображений.
- При необходимости добавьте обработку ситуации с прокруткой, если у вас есть другие элементы в контейнере.
Похожие вопросы