В стандартной конфигурации Pikaday привязывается к HTML-полю ввода и
автоматически синхронизирует выбранную дату с его значением. Однако
библиотека поддерживает режим автономного использования, при котором
календарь существует как самостоятельный UI-компонент, встроенный в
произвольный контейнер и управляемый программно без участия
<input>.
Такой подход применяется в интерфейсах, где поле ввода отсутствует или заменено кастомными элементами: виджетами фильтрации, панелями выбора периода, дашбордами и календарными модулями в сайдбарах.
Ключевой параметр автономного режима — bound: false. Он
полностью отключает стандартное поведение, при котором календарь
прикрепляется к input-элементу и управляет его значением.
const picker = new Pikaday({
bound: false
});
После установки bound: false календарь больше не ищет
input и не пытается синхронизировать значение с DOM-элементом формы.
Чтобы календарь стал частью интерфейса, используется параметр
container, принимающий DOM-элемент, в который будет
отрисован календарь.
<div id="calendar-container"></div>
const container = document.getElementById('calendar-container');
const picker = new Pikaday({
bound: false,
container: container
});
В этом режиме календарь ведёт себя как встроенный компонент и занимает пространство внутри указанного блока.
При использовании container библиотека перестаёт
управлять позиционированием всплывающего окна. Вместо этого
календарь:
Это превращает компонент в статический календарный виджет.
Выбор даты осуществляется через внутренний API экземпляра. Основной
механизм — событие onSelect, которое вызывается при клике
по дате.
const picker = new Pikaday({
bound: false,
container: document.getElementById('calendar-container'),
onSelect: function(date) {
console.log('Выбрана дата:', date);
}
});
Объект date представляет собой JavaScript
Date, что позволяет сразу использовать его в вычислениях,
форматировании и фильтрации данных.
Автономный режим предполагает активное использование методов экземпляра.
picker.setDate(new Date(2026, 5, 1));
Метод изменяет выбранное значение и обновляет отображение календаря.
const selected = picker.getDate();
Если дата не выбрана, возвращается null.
picker.setDate(null);
Сброс состояния приводит календарь в исходное положение без выделенной даты.
Хотя bound: false делает календарь встроенным,
управление видимостью контейнера остаётся на стороне приложения.
document.getElementById('calendar-container').style.display = 'none';
При необходимости календарь может быть динамически включён:
document.getElementById('calendar-container').style.display = 'block';
В некоторых архитектурах календарь создаётся один раз и затем многократно показывается/скрывается без повторной инициализации.
Автономный режим часто используется в виджетах, где дата уже известна заранее.
const picker = new Pikaday({
bound: false,
container: document.getElementById('calendar-container'),
defaultDate: new Date(2026, 5, 1),
setDefaultDate: true
});
Параметр setDefaultDate заставляет календарь сразу
активировать указанную дату как выбранную.
Так как input отсутствует, форматирование даты выполняется вручную
через onSelect.
function formatDate(date) {
return date.toISOString().split('T')[0];
}
const picker = new Pikaday({
bound: false,
container: document.getElementById('calendar-container'),
onSelect: function(date) {
document.getElementById('output').textContent = formatDate(date);
}
});
Такой подход отделяет UI календаря от логики отображения данных.
Автономный режим позволяет создавать несколько независимых календарей на одной странице.
const first = new Pikaday({
bound: false,
container: document.getElementById('calendar-1')
});
const second = new Pikaday({
bound: false,
container: document.getElementById('calendar-2')
});
Каждый экземпляр имеет собственное состояние, навигацию и обработчики событий.
Автономный календарь часто используется в следующих сценариях:
В таких случаях календарь становится частью сложного UI и взаимодействует с другими компонентами через события и общие состояния приложения.
Ограничения диапазона работают так же, как и в стандартном режиме.
const picker = new Pikaday({
bound: false,
container: document.getElementById('calendar'),
minDate: new Date(2026, 0, 1),
maxDate: new Date(2026, 11, 31)
});
Это особенно важно для интерфейсов, где выбор даты должен соответствовать бизнес-логике.
Автономный режим требует аккуратного управления жизненным циклом.
Удаление экземпляра:
picker.destroy();
После уничтожения DOM-элементы календаря удаляются, и контейнер становится пустым. Повторная инициализация возможна только через создание нового экземпляра.
Если контейнер удаляется из DOM, календарь перестаёт отображаться, но экземпляр может оставаться в памяти. Это требует ручного контроля в приложениях с динамическими интерфейсами (SPA).
В таких архитектурах важно синхронизировать жизненный цикл календаря с жизненным циклом компонента интерфейса.
Встроенный календарь использует те же CSS-классы, что и всплывающая версия. Основные точки кастомизации:
.pika-single.pika-lendar.pika-button.pika-day.pika-single {
border-radius: 8px;
box-shadow: 0 4px 20px rgba(0,0,0,0.1);
}
Автономный режим позволяет глубже интегрировать внешний вид календаря в дизайн системы без ограничений позиционирования.
Ключевое событие — onSelect, но также доступны:
const picker = new Pikaday({
bound: false,
container: document.getElementById('calendar'),
onSelect: function(date) {
console.log(date);
},
onOpen: function() {
console.log('календарь активирован');
},
onDraw: function() {
console.log('перерисовка календаря');
}
});
Эти события позволяют синхронизировать календарь с внешними компонентами интерфейса.
Автономное использование изменяет роль календаря в приложении:
Такой подход соответствует компонентной модели интерфейсов, где календарь является независимым модулем, интегрируемым в более крупные системы управления состоянием.