Shepherd.js предоставляет мощный механизм для управления событиями на уровне отдельного тура. Эти события позволяют реагировать на ключевые моменты в жизненном цикле тура: его запуск, переход между шагами, завершение или отмену. Правильное использование событий повышает гибкость интерактивных инструкций и обеспечивает интеграцию с другими компонентами приложения.
В Shepherd.js события тура делятся на несколько категорий:
tour.start().tour.cancel().Эти события позволяют синхронизировать действия внешних компонентов с состоянием тура, а также выполнять кастомные функции в нужные моменты.
События тура регистрируются через метод on объекта
тура:
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: {
enabled: true
},
scrollTo: { beh * avior: 'smooth', block: 'center' }
}
});
tour.on('start', () => {
console.log('Тур запущен');
});
tour.on('complete', () => {
console.log('Тур завершен');
});
tour.on('cancel', () => {
console.log('Тур отменен');
});
Каждый обработчик получает объект события и, при необходимости, дополнительные параметры. Например, при обработке событий шагов можно получать текущий шаг, чтобы динамически изменять его содержимое.
Хотя шаги Shepherd.js имеют свои собственные события, часто требуется
обработка событий шагов через объект тура. Это достигается с помощью
событий show и hide, которые предоставляют
ссылку на текущий шаг:
tour.on('show', (event) => {
const step = event.step;
console.log(`Показан шаг: ${step.id}`);
});
tour.on('hide', (event) => {
console.log(`Скрыт шаг: ${event.step.id}`);
});
Использование event.step позволяет не только отслеживать
прогресс тура, но и выполнять кастомные действия для каждого конкретного
шага, например, запуск анимаций или подгрузку данных.
Для предотвращения утечек памяти и управления динамическими турами
важно уметь удалять обработчики событий. Shepherd.js предоставляет метод
off:
function onTourStart() {
console.log('Тур снова запущен');
}
tour.on('start', onTourStart);
// Позднее при необходимости убрать обработчик
tour.off('start', onTourStart);
Метод off принимает два аргумента: название события и
ссылку на функцию-обработчик. Без передачи функции будет удалена только
конкретная зарегистрированная функция, а не все обработчики события.
События тура могут быть использованы для выполнения асинхронных действий перед переходом к следующему шагу. Например, можно подгружать данные или выполнять сетевые запросы:
tour.on('show', async (event) => {
const step = event.step;
await fetchDataForStep(step.id);
step.updateStepOptions({
text: `Данные подгружены для шага ${step.id}`
});
});
Асинхронные операции позволяют сделать тур динамичным и контекстно-зависимым, что особенно полезно для сложных интерфейсов с большим количеством интерактивных элементов.
Важно понимать последовательность срабатывания основных событий тура:
start — перед показом первого шага.show — когда первый шаг видим на странице.active — когда шаг активен и готов к
взаимодействию.hide — перед переходом к следующему шагу.complete — после окончания последнего шага.cancel — если тур был прерван в любой момент.Эта последовательность позволяет точно синхронизировать внешние действия с состоянием тура и избежать конфликтов при динамических изменениях интерфейса.
off, если тур создается
динамически несколько раз, чтобы избежать накопления функций.Эффективное использование событий уровня тура делает Shepherd.js гибким инструментом для построения интерактивных гидов, позволяя не только демонстрировать интерфейс, но и управлять логикой приложения в процессе взаимодействия с пользователем.