Как создать эффект рассеивания и сборки воды с помощью html css и js

1
5

Я хочу создать интересный эффект, при котором кольцо или круг при наведении на них разбивается на более мелкие частицы или элементы, которые рассеиваются или вытекают наружу, подобно тому, как вода растекается и собирается обратно в исходное положение. Как можно добиться такого эффекта с помощью CSS-анимаций и обработки событий JavaScript.

Вот пример (пожалуйста, откройте версию для ПК, так как она может не работать в мобильной версии.)

https://www.codeglo.com/

Как мне добиться эффекта, похожего на тот, что есть у этого зеленого круга, для логотипа/изображения птицы?

Каков будет ваш подход? Пожалуйста, объясните его пошагово, так как я новичок в html, css и js.

Какая существующая комбинация технологий frontend и backend (если она необходима) использовалась codeglo для достижения этого эффекта? Как можно это точно предположить?

Порфирий
Вопрос задан17 августа 2024 г.

1 Ответ

2

Хорошо, чтобы создать эффект рассеивания и сборки воды с помощью HTML, CSS и JavaScript, мы можем использовать комбинацию следующих техник:

  1. HTML структура:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Вода</title>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <div class="water"></div>
        <script src="script.js"></script>
    </body>
    </html>
    
  2. CSS стили:

    .water {
        width: 300px;
        height: 200px;
        background-color: #0080ff; /* Цвет воды */
        border-radius: 50%; /* Округление */
        position: relative;
        overflow: hidden;
    }
    
    .water::before {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.5) 0%, transparent 100%); /* Радиальный градиент для волн */
        animation: waves 3s linear infinite;
    }
    
    @keyframes waves {
        0% {
            transform: translate(0, 0);
        }
        50% {
            transform: translate(0, -5px);
        }
        100% {
            transform: translate(0, 0);
        }
    }
    
  3. JavaScript анимация:

    const water = document.querySelector('.water');
    let isScattering = false;
    
    water.addEventListener('click', () => {
        isScattering = !isScattering;
        if (isScattering) {
            water.style.animation = 'scatter 1s ease-out forwards';
        } else {
            water.style.animation = 'gather 1s ease-in forwards';
        }
    });
    
    @keyframes scatter {
        from {
            width: 300px;
            height: 200px;
        }
        to {
            width: 500px; /* Расширение */
            height: 300px; /* Расширение */
            border-radius: 0; /* Удаление округления */
            transform: translate(-100px, -50px); /* Смещение */
        }
    }
    
    @keyframes gather {
        from {
            width: 500px;
            height: 300px;
            border-radius: 0;
            transform: translate(-100px, -50px);
        }
        to {
            width: 300px;
            height: 200px;
            border-radius: 50%;
            transform: translate(0, 0);
        }
    }
    

Объяснение:

  • HTML: Создаем элемент div с классом water для представления воды.
  • CSS:
    • Устанавливаем стиль для water: цвет, размер, округление, относительное позиционирование.
    • Используем ::before псевдоэлемент для создания анимации волн с помощью радиального градиента.
    • Анимация waves создает плавное движение волн.
  • JavaScript:
    • Добавляем обработчик клика к элементу water.
    • При клике переключаем переменную isScattering.
    • Если isScattering истинно, запускаем анимацию scatter (рассеивание).
    • Если isScattering ложно, запускаем анимацию gather (сборка).
    • Анимации scatter и gather изменяют размер, форму и положение элемента water, создавая эффект рассеивания и сборки воды.

Дополнительные возможности:

  • Добавить брызги: Используйте дополнительные элементы div с анимациями для создания эффекта брызг.
  • Использовать canvas: Canvas позволяет создавать более сложные эффекты, например, динамические волны, брызги и взаимодействие с водой.
  • Использовать WebGL: WebGL позволяет создавать реалистичные 3D-эффекты воды.

Важно: Экспериментируйте с настройками CSS и JavaScript, чтобы получить желаемый эффект. 

Надеюсь, это поможет вам создать эффект рассеивания и сборки воды!

 

Касьян
Ответ получен7 сентября 2024 г.

Ваш ответ

Загрузить файл.