scrollPlugin представляет собой расширение для Flatpickr, добавляющее поддержку прокрутки (wheel/scroll interaction) для изменения значений в инпуте календаря и связанных полях. Основная задача плагина — обеспечить более естественное и быстрое управление датой и временем с помощью колесика мыши или жестов прокрутки, имитируя поведение «спиннеров» в нативных UI-компонентах.
Flatpickr построен как модульная система, где ядро отвечает за:
Плагины расширяют поведение без модификации ядра. scrollPlugin относится к категории interaction-плагинов и работает на уровне DOM-событий, перехватывая:
Основная цель — преобразование прокрутки в инкремент/декремент значений даты, месяца, года или времени.
scrollPlugin привязывается к элементам ввода Flatpickr и отслеживает направление прокрутки:
Дальнейшая логика зависит от контекста:
Плагин использует внутренние API Flatpickr для безопасного изменения даты:
Это важно: плагин не изменяет DOM напрямую, а работает через state-слой Flatpickr.
Плагин поставляется как отдельный модуль:
import flatpickr from "flatpickr";
import scrollPlugin from "flatpickr/dist/plugins/scrollPlugin";
И подключается через конфигурацию:
flatpickr("#dateInput", {
plugins: [scrollPlugin()]
});
Базовая инициализация не требует дополнительных параметров.
При использовании стандартного режима date:
При включении времени поведение расширяется:
flatpickr("#timeInput", {
enableTime: true,
noCalendar: true,
dateFormat: "H:i",
plugins: [scrollPlugin()]
});
В режиме datetime scrollPlugin разделяет контекст:
При этом плагин определяет активный сегмент UI по DOM-структуре Flatpickr.
scrollPlugin регистрирует wheel handler с учётом следующих особенностей:
event.deltaY используется как основной источник
направленияУпрощённая логика:
Flatpickr накладывает ограничения на scrollPlugin через внутренние правила:
Это предотвращает неконсистентное состояние даты.
scrollPlugin не влияет напрямую на формат отображения, но работает совместно с:
Изменения через scrollPlugin всегда проходят через setDate, что автоматически триггерит перерасчёт форматирования.
При использовании плагина выбора месяца scrollPlugin усиливает UX:
scrollPlugin оптимизирован под минимальную нагрузку:
Основная нагрузка возникает только при частых scroll-событиях, что контролируется через debounce/throttle.
На тачпадах deltaY может быть малым, поэтому:
Из-за инерции возможны:
Flatpickr частично компенсирует это ограничением скорости обновления.
scrollPlugin не требует специальных CSS классов, но поведение зависит от:
Если календарь открыт, приоритет может переходить к календарному UI вместо инпута.
flatpickr("#datetime", {
enableTime: true,
time_24hr: true,
minuteIncrement: 5,
plugins: [scrollPlugin()],
minDate: "2024-01-01",
maxDate: "2027-12-31"
});
В такой конфигурации scrollPlugin управляет:
scrollPlugin работает параллельно с ручным вводом:
scrollPlugin вписывается в общую модель Flatpickr как слой взаимодействия:
Такой подход обеспечивает независимость логики и расширяемость без модификации ядра.