aroma.md 06.05.2026

Aroma. Лендинг кофейни

Одностраничный лендинг кофейни: атмосфера, меню с фильтрами и каруселью, форма бронирования с модалкой подтверждения.

Задача

Типовая задача — сайт-визитка. Вся нестандартность собралась в карусели меню: не слайдер из коробки, а самописная штука, которая должна работать при трёх условиях одновременно — переменное число видимых карточек, фильтрация по категориям с пересчётом и прокрутка, управляемая снаружи.

Как делал

Внутри контейнера display: flex с overflow-x: auto, прокрутка нативная через scrollTo({ behavior: 'smooth' }). Никакого transform: translateX() с пересчётом индекса — браузер сам рисует плавный скролл, а JS только выставляет целевую позицию в пикселях.

Главная возня — синхронизация состояния. Листать можно стрелками, свайпом или просто пальцем по overflow-x, и всё это должно вести один и тот же currentIndex. Отсюда флаг isAnimating: пока идёт программный скролл, обработчик нативного scroll игнорируется, иначе он ловит промежуточные значения и перезаписывает индекс в середине анимации.

Фильтрация — это display: none для ненужных карточек и повторный initCarousel() через 50 мс: после смены display браузеру нужно пересчитать layout, иначе clientWidth вернёт старые значения. Точки и максимум индекса считаются от видимых элементов, поэтому один и тот же код обслуживает и «Все», и любую отдельную категорию.

Итог

Карусель не ломается при смене фильтра, ресайзе и свайпах: стрелки дизейблятся на краях, точки синхронизированы с индексом. Вся её логика — около двухсот строк ванильного JS без зависимостей.

// похожие проекты

Ещё работы

// проект 2026
Нет изображения

Парсер публикаций ВКонтакте

Парсер для VK: находит подходящие посты в поиске новостей и ставит их в предложку своих групп, с защитой от повторов.

// проект 2026
Скриншот главной страницы лендинга ИГРАЙ-КА

«Играй-ка». Лендинг магазина игрушек

Одностраничный лендинг магазина детских игрушек: витрина, категории, отзывы и форма заявки.

// проект 2026
Скриншот главной страницы лендинга DRIVE24

DRIVE24. Лендинг сервиса каршеринга

Лендинг сервиса каршеринга на WordPress + Elementor: тарифы, автопарк, инструкция, приложение, отзывы и форма заявки.

// проект 2026
Скриншот главной страницы сайта ayupov

Ayupov. Сайт-портфолио

Сайт-портфолио на своей теме WordPress с нуля: живой терминал, скрамбл-заголовок, CSS одним ответом.

// проект 2026
Скриншот главной страницы лендинга пекарни "круассан"

«Круассан». Лендинг для пекарни

Лендинг пекарни: меню выпечки, отзывы, контакты и форма заказа торта.

// проект 2026
Нет изображения

Бот для сбора лидов из Telegram-каналов и RSS

Бот для Telegram: читает каналы и RSS-ленты, фильтрует заказы по ключевым словам с весами и присылает подходящие в личку.

> все проекты

// contact.php

Ну что, работаем?

Опишите задачу — разберусь и предложу решение.