Как создать анимацию появления изображений при нажатии кнопки?

Можете пояснить, как реализовать плавное появление изображений при нажатии на первую кнопку и их плавное исчезновение при нажатии на вторую кнопку, так чтобы это поведение сохранялось при повторных нажатиях?
  • 19 сентября 2024 г. 17:23
Ответы на вопрос 2
Создание анимации появления и исчезновения изображений при нажатии на кнопки можно реализовать с использованием 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">
    <title>Анимация изображений</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>

    <button id="showButton">Показать изображения</button>
    <button id="hideButton">Скрыть изображения</button>

    <div id="imageContainer">
        <img class="fade" src="image1.jpg" alt="Изображение 1">
        <img class="fade" src="image2.jpg" alt="Изображение 2">
        <img class="fade" src="image3.jpg" alt="Изображение 3">
    </div>

    <script src="script.js"></script>
</body>
</html>
```

### CSS

Добавьте стили для изображений и анимации:

```css
/* styles.css */
body {
    display: flex;
    flex-direction: column;
    align-items: center;
}

#imageContainer {
    margin-top: 20px;
}

.fade {
    opacity: 0;
    transition: opacity 0.5s ease-in-out;
    display: none; /* Скрываем их изначально */
}

.fade.visible {
    opacity: 1;
    display: block; /* Показываем, когда добавим класс visible */
}
```

### JavaScript

Добавьте логику для обработки нажатий кнопок и управления классами изображений:

```javascript
// script.js
document.addEventListener("DOMContentLoaded", function () {
    const showButton = document.getElementById("showButton");
    const hideButton = document.getElementById("hideButton");
    const images = document.querySelectorAll(".fade");
    
    showButton.addEventListener("click", function () {
        images.forEach(image => {
            // Проверяем, если изображение уже на экране
            if (!image.classList.contains('visible')) {
                image.classList.add('visible');
                // Убедимся, что отображаемое изображение видимо после добавления класса
                image.style.display = 'block';
            }
        });
    });

    hideButton.addEventListener("click", function () {
        images.forEach(image => {
            // Проверяем, если изображение уже скрыто
            if (image.classList.contains('visible')) {
                image.classList.remove('visible');
                // Скрываем после завершения анимации
                setTimeout(() => {
                    image.style.display = 'none';
                }, 500); // Соответствует времени перехода (0.5 секунды)
            }
        });
    });
});
```

### Объяснение

1. **HTML**: Две кнопки для показа и скрытия изображений, а также контейнер для изображений.
   
2. **CSS**: Класс `.fade` изначально устанавливает непрозрачность изображений в 0 и добавляет плавный переход. Класс `visible` изменяет непрозрачность на 1 и устанавливает изображение как видимое.

3. **JavaScript**:
   - Перехватываем события нажатия кнопок.
   - При нажатии на кнопку "Показать" проверяем, есть ли у изображения класс `visible`. Если нет — добавляем его и выставляем свойство `display` в `block` для отображения.
   - При нажатии на кнопку "Скрыть" проверяем наличие класса `visible`. Если класс есть, мы его удаляем, а изображение скрываем через 500 мс (время анимации).

Теперь при нажатии на кнопки изображения будут плавно появляться и исчезать, и это поведение будет сохраняться при повторных нажатиях.
Для вашей задачи достаточно будет использования свойств opacity и transition вместо visibility. 

<div class="knopka">
  <div class="kn">
    <button onclick="showElement()">Показать больше</button>
  </div>
  
  <div class="kn1">
    <button onclick="hideElement()">Скрыть</button>
  </div>
  
  <div class="container" id="imageContainer">
    <div class="scr41">
      <img src="/Untitled (5)/Group 10.png" alt="Image 1">
    </div>
  
    <div class="scr51">
      <img src="/Untitled (5)/Group 11.png" alt="Image 2">
    </div>

    <div class="scr51">
      <img src="/Untitled (5)/Group 12.png" alt="Image 3">
    </div>
  </div>
</div>


.knopka {
    text-align: end;
}

.kn {
    margin-top: -55px;
    margin-right: 350px;
}

.kn button, .kn1 button {
    color: #4E4E4E;
    border-radius: 5px;
    background-color: #F7F7F7;
    font-size: 15px;
    border: none;
    width: 200px;
    height: 40px;
}

.kn button:hover, .kn1 button:hover {
    background-color: #ffa34857;
    color: rgb(0, 0, 0);
    transition: all 0.6s ease;
}

.container {
    justify-content: center;
    display: flex;
    opacity: 0;
    transition: opacity 1s ease-in-out;
    pointer-events: none;
}

.container.show {
    opacity: 1;
    pointer-events: auto;
}

.scr41 img, .scr51 img {
    margin-top: 70px;
    width: 140px;
}


function showElement() {
    const element = document.getElementById('imageContainer');
    element.classList.add('show');
}

function hideElement() {
    const element = document.getElementById('imageContainer');
    element.classList.remove('show');
}
Похожие вопросы