Shepherd.js предоставляет гибкую систему управления событиями для кастомизации поведения туров и шагов. Каждый шаг может содержать собственные обработчики событий, которые реагируют на действия пользователя, состояние интерфейса или изменения самого тура. События позволяют автоматически выполнять код при начале шага, его завершении, закрытии и других действиях.
Для добавления обработчиков событий используется метод
on. Он доступен как на уровне тура, так и
на уровне шага:
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: {
enabled: true
}
}
});
tour.addStep({
id: 'intro',
text: 'Добро пожаловать!',
attachTo: {
element: '.header',
on: 'bottom'
}
});
// Добавление обработчика на шаг
tour.getById('intro').on('show', () => {
console.log('Шаг показан');
});
// Добавление обработчика на тур
tour.on('complete', () => {
console.log('Тур завершён');
});
Основные события шага:
show – шаг становится видимым;hide – шаг скрыт;destroy – шаг удалён из DOM;complete – шаг завершён (при использовании
навигации);cancel – шаг отменён пользователем.Основные события тура:
start – запуск тура;complete – успешное завершение тура;cancel – отмена тура;inactive – тур не активен;active – тур активен.Shepherd.js позволяет навешивать несколько обработчиков на одно событие:
const step = tour.getById('intro');
step.on('show', () => console.log('Первый обработчик'));
step.on('show', () => console.log('Второй обработчик'));
Обработчики вызываются в том порядке, в котором они были добавлены.
Для удаления обработчиков используется метод off. Он
принимает имя события и функцию-обработчик:
function onShowStep() {
console.log('Показываем шаг');
}
step.on('show', onShowStep);
// позже можно удалить
step.off('show', onShowStep);
Если не передавать функцию, будут удалены все обработчики данного события:
step.off('show');
Обработчики получают в контексте объект шага (this), что
позволяет управлять состоянием шага и туром внутри функции:
step.on('show', function() {
console.log(`Текущий шаг: ${this.id}`);
this.updateStepOptions({ cancelIcon: { enabled: false } });
});
Помимо базовых событий, Shepherd.js предоставляет события навигации по шагам, которые полезны для динамического изменения контента:
before-show – вызывается перед показом шага, можно
изменить текст, позицию или другие опции;before-hide – срабатывает перед скрытием шага, полезно
для анимаций и сохранения данных;active – шаг становится активным (только после
рендеринга);inactive – шаг теряет активность.Пример динамического изменения текста шага перед показом:
step.on('before-show', function() {
this.updateStepOptions({
text: `Сегодня: ${new Date().toLocaleDateString()}`
});
});
Shepherd.js интегрируется с DOM через attachTo. Иногда
необходимо реагировать на события вне шага, например, клики на
определённые элементы. Для этого можно использовать глобальные
обработчики и синхронизировать их с состоянием тура:
document.querySelector('.next-btn').addEventListener('click', () => {
tour.next();
});
tour.on('cancel', () => {
document.querySelector('.next-btn').disabled = false;
});
События позволяют добавлять проверки перед переходом на следующий шаг:
step.on('before-hide', function() {
if (!document.querySelector('#agree').checked) {
alert('Необходимо согласиться с условиями!');
return false; // блокируем скрытие шага
}
});
Это работает совместно с методами show и
hide, контролируя поток тура.
Обработчики можно использовать для запуска анимаций, логирования, отправки данных на сервер или интеграции с другими библиотеками:
step.on('show', () => {
gsap.from('.highlight', { opacity: 0, duration: 1 });
});
tour.on('complete', () => {
fetch('/log-tour-completion', { method: 'POST' });
});
on, чтобы
поддерживать читаемость.Обработчики событий в Shepherd.js обеспечивают гибкое управление поведением шагов и тура, позволяя реализовать сложные сценарии пользовательского опыта, динамическое изменение контента и интеграцию с внешними сервисами без модификации исходного кода библиотеки.