Как можно визуально отобразить остаток жидкости в бутылке с помощью CSS и JavaScript?

Здравствуйте.  
У меня есть задача: у меня есть 1-литровая бутылка, из которой периодически убавляется вода.  
Как можно графически отобразить уровень воды в бутылке?  
То есть, мне нужно визуально показать, какая часть бутылки заполнена, и рядом указать, сколько миллилитров осталось в ней.  
  
Может, существуют какие-то плагины, графики или столбики, которые я мог бы адаптировать под свои нужды? Буду признателен за ваши идеи.  
  
<a href="https://codepen.io/irodger/pen/vGbvKm" rel="nofollow">Я нашел что-то подобное</a>, но, возможно, у вас есть другие предложения.
  • 17 октября 2024 г. 19:42
Ответы на вопрос 2
Здравствуйте!

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

### Вот пример реализации:

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Уровень воды в бутылке</title>
    <style>
        .bottle {
            width: 100px;
            height: 300px;
            background: #cfe2f3;
            border: 5px solid #000;
            border-radius: 10px;
            position: relative;
            overflow: hidden;
        }
        .water {
            width: 100%;
            background: #007bff;
            position: absolute;
            bottom: 0;
            transition: height 0.5s;
        }
        .level {
            margin-top: 20px;
            font-size: 24px;
            text-align: center;
        }
    </style>
</head>
<body>

<div class="bottle">
    <div class="water" id="water" style="height: 100%;"></div>
</div>
<div class="level" id="level">Осталось: 1000 мл</div>
<input type="range" id="water-level" min="0" max="1000" value="1000" step="10">

<script>
    const waterElement = document.getElementById('water');
    const levelElement = document.getElementById('level');
    const waterLevelInput = document.getElementById('water-level');

    waterLevelInput.addEventListener('input', (event) => {
        const remainingWater = event.target.value;
        const height = (remainingWater / 1000) * 100; // высота в процентах
        waterElement.style.height = height + '%';
        levelElement.textContent = `Осталось: ${remainingWater} мл`;
    });
</script>

</body>
</html>
```

### Пояснение к коду:

1. **HTML-структура**:
   - Создаем `div` для бутылки с классом `bottle`.
   - Внутри бутылки создаем `div` для воды с классом `water`, который будет изменять свою высоту в зависимости от оставшегося объема.
   - Добавляем `div` для отображения оставшегося объема и слайдер для изменения уровня воды.

2. **CSS-стили**:
   - Применяем стили для бутылки и воды, устанавливая размеры и цвета.
   - Устанавливаем `overflow: hidden`, чтобы любые элементы, выходящие за пределы бутылки, скрывались.

3. **JavaScript**:
   - Получаем элементы для воды и уровня.
   - Добавляем обработчик событий для изменения значения слайдера, который динамически обновляет высоту воды и текстовое значение оставшегося объема в миллилитрах.

### Итог:

С помощью этого простого примера вы можете визуально отобразить уровень воды в бутылке и легко управлять этим уровнем с помощью слайдера. Вы можете дополнительно настроить стили и функциональность в соответствии с вашими предпочтениями.
Рисуем бутылку в фотошопе или иллюстраторе. 
В иллюстраторе делаем внутренний контур.
Поверх бутылки накладываем див, у которого фон закрашивается по вертикали на необходимый уровень
Делаем из контура свгэшку и накладываем svg-маску на див-заполнитель.
Похожие вопросы