Калькулятор ЛКМ
Интерактивный калькулятор расхода лакокрасочных материалов с 2D SVG-редактором плана помещений, 3D CSS-визуализацией и каталогом из 15 000+ товаров. Vanilla JavaScript, без фреймворков.
Задача клиента
2D-редактор плана
23 модуля, 336 КБ кода
Полноценный SVG-редактор с 5 инструментами рисования, snap-привязкой к сетке и объектам, undo/redo, контекстными меню. Окна рисуются с рамами и стеклом, двери — с ручками. Экспорт плана в PDF.
3D без Three.js
CSS 3D Transforms, 60 fps
Принципиальное решение — 3D на чистом CSS, без WebGL. Каждая стена, потолок и пол — HTML div с transform3d. Вращение мышью, зум колесом, клик по грани = выбор поверхности. Работает на любых устройствах.
Умный расчёт
Многофакторная формула
Ядро калькулятора учитывает площадь с вычетом проёмов, расход л/м², количество слоёв, впитываемость основания (7 типов), инструмент нанесения и настраиваемый резерв. Алгоритм DP подбирает оптимальную фасовку банок.
const area = 25.4 // м² const consumption = 0.12 // л/м² const layers = 2 const substrate = 1.10 // штукатурка const tool = 1.00 // валик const liters = area * consumption * (substrate + (layers-1) * 1.0) * tool // → 6.4 л + 10% резерв = 7.0 л
Каталог товаров
200+ брендов, 50+ палитр
Встроенный каталог подключён к PostgreSQL с 15 000+ товаров. Фасетная фильтрация по бренду, типу работ, глянцу, материалу. 10 000+ цветов из палитр Tikkurila, RAL, NCS. Ежедневная автосинхронизация.
UX-решения
Интерактивный тур
Coach-marks с подсветкой, анимированная дырка в оверлее, ожидание появления элемента до 18 сек
Два уровня
«Просто» — быстрый расчёт за 3 шага. «Подробно» — проёмы, основания, слои, колеровка
4 палитры + темы
Amber, teal, indigo, terracotta. Светлая/тёмная тема. Мгновенная смена через CSS Custom Properties
Защита от ошибок
SpinHold, блокировка колеса мыши, валидация диапазонов, подтверждение сброса
Технический стек
Результаты
«Мы сделали инструмент, который не просто считает литры краски, а позволяет спроектировать помещение, увидеть его в 3D и получить готовый список покупок с ценами — всё в одном окне браузера»