Shepherd.js предоставляет мощные возможности для создания интерактивных пошаговых туров на веб-странице. Одной из таких возможностей являются условные переходы, которые позволяют изменять логику следования шагов в зависимости от действий пользователя или состояния приложения.
В Shepherd.js условные переходы реализуются через функции обратного вызова и условные параметры в конфигурации шага. Основные механизмы:
when и
beforeShowPromise
beforeShowPromise — промис, который выполняется перед
отображением шага. Можно использовать для проверки условий и
динамического изменения шага.tour.addStep({
id: 'step-conditional',
text: 'Этот шаг появится только если выполнено условие',
beforeShowPromise: function() {
return new Promise((resolve, reject) => {
if (window.userLoggedIn) {
resolve();
} else {
reject(); // шаг не отображается
}
});
}
});
Динамический выбор следующего шага через
advanceOn
advanceOn позволяет автоматически переходить к
следующему шагу при наступлении определённого события.tour.addStep({
id: 'step-advance',
text: 'Выберите действие, чтобы перейти',
attachTo: { element: '#button', on: 'bottom' },
advanceOn: {
selector: '#button',
event: 'click',
condition: () => window.hasPermission // условие перехода
}
});
Методы tour.next() и
tour.back() с проверками
tour.next()
только при выполнении определённых условий:document.querySelector('#nextBtn').addEventListener('click', () => {
if (formIsValid()) {
tour.next();
} else {
alert('Сначала заполните форму');
}
});
Shepherd.js позволяет создавать ветвления, где один шаг может вести к разным следующим шагам в зависимости от состояния:
tour.addStep({
id: 'step-choice',
text: 'Выберите путь',
buttons: [
{
text: 'Путь А',
action: () => tour.show('stepA')
},
{
text: 'Путь B',
action: () => tour.show('stepB')
}
]
});
tour.addStep({
id: 'stepA',
text: 'Вы выбрали путь А'
});
tour.addStep({
id: 'stepB',
text: 'Вы выбрали путь B'
});
Ключевой момент: метод show(stepId)
позволяет перепрыгивать на любой шаг вне стандартного линейного
порядка.
Можно изменять содержимое, кнопки или условие отображения шагов на лету перед их показом:
tour.addStep({
id: 'step-dynamic',
text: 'Стартовый текст',
buttons: [
{
text: 'Далее',
action: () => tour.next()
}
],
beforeShowPromise: function() {
return new Promise((resolve) => {
if (userHasPremium) {
this.updateStepOptions({
text: 'Вы обладаете премиум-доступом! Продолжаем тур.',
buttons: [
{ text: 'Следующий шаг', action: () => tour.show('premiumStep') }
]
});
}
resolve();
});
}
});
Проверка состояния приложения перед каждым шагом
beforeShowPromise для динамического
отображения шагов.Выбор шага на основе пользовательского ввода
action() позволяют создавать
интерактивные ветвления.beforeShowPromise для более
гибкой адаптации тура под пользователя.Пропуск шагов
resolve(), или сразу вызывать tour.next() для
пропуска.beforeShowPromise и action() кнопок, чтобы
видеть, какие условия выполняются.const tour = new Shepherd.Tour({ defaultStepOptions: { cancelIcon: { enabled: true } } });
tour.addStep({
id: 'welcome',
text: 'Добро пожаловать!',
buttons: [{ text: 'Далее', action: () => tour.next() }]
});
tour.addStep({
id: 'user-check',
text: 'Проверка доступа...',
beforeShowPromise: function() {
return new Promise((resolve) => {
if (window.userRole === 'admin') {
this.updateStepOptions({ text: 'Вы администратор, продолжим!' });
resolve();
} else {
tour.show('guest-step');
}
});
}
});
tour.addStep({
id: 'guest-step',
text: 'Вы обычный пользователь, ограничения применены',
buttons: [{ text: 'Завершить тур', action: () => tour.complete() }]
});
tour.start();
В этом примере реализован ветвящийся тур, где
следующий шаг выбирается на основе роли пользователя, а
шаги динамически модифицируются с использованием
updateStepOptions() и beforeShowPromise.
Использование условных переходов в Shepherd.js позволяет создавать
адаптивные интерактивные туры, гибко реагирующие на
состояние приложения и действия пользователя. Основные инструменты:
beforeShowPromise, advanceOn,
tour.show(stepId) и динамическая модификация шагов через
updateStepOptions(). Их комбинация обеспечивает построение
туров любой сложности, включая ветвления, пропуски шагов и интерактивные
выборы.