В Shepherd.js опция when позволяет
управлять выполнением действий на определённых событиях тура или
конкретного шага. Она предоставляет гибкий механизм для привязки функций
к жизненному циклу шагов, что делает поведение интерфейса более
интерактивным и динамичным.
whenОпция when является объектом, где ключи соответствуют
событиям, а значения — функции-обработчики. Пример базовой
структуры:
const step = tour.addStep({
id: 'example-step',
text: 'Это пример шага с обработчиками событий',
when: {
show: () => console.log('Шаг показан'),
hide: () => console.log('Шаг скрыт'),
complete: () => console.log('Шаг завершён')
}
});
Ключевые моменты:
События — это строки, соответствующие событиям жизненного цикла шага. Основные события:
show — вызывается, когда шаг отображается.hide — вызывается, когда шаг скрывается.complete — вызывается при завершении шага (например,
при клике на кнопку «Далее»).cancel — вызывается, если тур отменён
пользователем.Обработчики — функции, выполняющиеся в момент наступления события. Они могут быть как синхронными, так и асинхронными.
Помимо событий отдельных шагов, when можно использовать
для управления событиями всего тура:
const tour = new Shepherd.Tour({
defaultStepOptions: {
when: {
show: () => console.log('Показан шаг любого шага по умолчанию'),
hide: () => console.log('Скрыт шаг любого шага по умолчанию')
}
}
});
Особенности:
whenФункции, заданные в when, могут выполнять асинхронные
операции, включая fetch, setTimeout, или
вызовы библиотек для анимации:
tour.addStep({
id: 'async-step',
text: 'Шаг с асинхронной операцией',
when: {
show: async () => {
await fetch('/api/data');
console.log('Данные загружены перед показом шага');
}
}
});
async/await для управления
последовательностью действий.when для динамического изменения шагаМожно динамически изменять свойства шага во время событий:
tour.addStep({
id: 'dynamic-step',
text: 'Текст изменится при показе',
when: {
show: (event) => {
const step = event.step;
step.updateStepOptions({
text: 'Новый текст после события show'
});
}
}
});
event.step даёт доступ к объекту шага, что позволяет
изменять текст, кнопки, позицию или любые другие свойства.Помимо стандартных событий, можно создавать собственные события через
вызов метода trigger:
tour.on('customEvent', () => console.log('Пользовательское событие вызвано'));
tour.trigger('customEvent');
when остаётся аналогичной: шаги могут
подписываться на события тура через when или использовать
глобальный tour.on.when
для действий, которые связаны только с отображением и скрытием шагов.
Логику туров лучше держать на уровне tour.on.show и hide вызываются часто, поэтому
блокирующие операции могут ухудшить UX.async/await для операций, которые зависят от данных с
сервера или от сложных вычислений.const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true,
when: {
show: () => console.log('Пошаговый тур начинается'),
}
}
});
tour.addStep({
id: 'step-1',
text: 'Первый шаг',
when: {
show: () => console.log('Показывается первый шаг'),
complete: () => console.log('Первый шаг завершён')
}
});
tour.addStep({
id: 'step-2',
text: 'Второй шаг с динамическим контентом',
when: {
show: (event) => {
event.step.updateStepOptions({
text: `Второй шаг. Текущее время: ${new Date().toLocaleTimeString()}`
});
}
}
});
tour.start();
В этом примере демонстрируются:
when для отслеживания завершения
шагов.Использование опции when делает
Shepherd.js мощным инструментом для создания
интерактивных, контекстно-зависимых и адаптивных пошаговых подсказок,
обеспечивая полный контроль над жизненным циклом каждого шага и всего
тура.