Shepherd.js предоставляет гибкий способ управления интерфейсом пользовательских туров на веб-странице. Одной из ключевых возможностей является условное отображение кнопок на каждом шаге тура. Это позволяет динамически изменять доступные действия пользователя в зависимости от контекста, состояния приложения или предыдущих шагов тура.
Каждый шаг Shepherd.js задаётся объектом с конфигурацией. Свойство
buttons принимает массив объектов, где каждый объект
описывает отдельную кнопку:
const step = {
id: 'example-step',
text: 'Это пример шага с кнопками',
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Далее',
action: tour.next
}
]
};
В стандартной конфигурации все кнопки отображаются без условий. Для динамического управления необходимо использовать функцию вместо массива или добавлять условия внутри объекта кнопки.
Shepherd.js позволяет задавать кнопки через функцию, которая возвращает массив. Это удобно, когда кнопки должны зависеть от состояния приложения:
const step = {
id: 'conditional-step',
text: 'Выберите действие',
buttons: () => {
const buttons = [];
if (appState.isUserLoggedIn) {
buttons.push({
text: 'Продолжить',
action: tour.next
});
} else {
buttons.push({
text: 'Войти',
action: () => redirectToLogin()
});
}
return buttons;
}
};
В данном примере отображается либо кнопка «Продолжить», если пользователь вошёл в систему, либо кнопка «Войти», если нет.
enabled
и его применениеКаждая кнопка может иметь свойство enabled, которое
принимает булевое значение или
функцию, возвращающую булево значение. Это позволяет
включать или отключать кнопку в зависимости от текущего состояния:
const step = {
id: 'enabled-step',
text: 'Пример кнопки с условием',
buttons: [
{
text: 'Далее',
action: tour.next,
enabled: () => appState.hasCompletedForm
}
]
};
Если enabled возвращает false, кнопка
отображается, но становится неактивной, что предотвращает её
использование до выполнения определённого условия.
Shepherd.js предоставляет методы addButton и
removeButton для управления кнопками уже после создания
шага. Это позволяет менять интерфейс во время выполнения
тура:
const step = tour.addStep({
id: 'dynamic-step',
text: 'Кнопки будут меняться динамически',
buttons: []
});
if (appState.showSpecialOption) {
step.addButton({
text: 'Специальная опция',
action: () => performSpecialAction()
});
}
Также возможна полная очистка кнопок с помощью метода
removeButton(id):
step.removeButton('default-next');
Иногда требуется отображать кнопку только после прохождения определённых шагов:
const step = {
id: 'conditional-after-step',
text: 'Эта кнопка появится только после шага 1',
buttons: [
{
text: 'Особый шаг',
action: tour.next,
enabled: () => tour.getCurrentStep().id === 'step-1'
}
]
};
Использование функции в enabled позволяет проверять
текущее положение пользователя в туре и корректно отображать кнопки.
enabled и динамической генерации кнопокДля максимальной гибкости можно комбинировать оба подхода: возвращать
массив кнопок через функцию и одновременно использовать
enabled для отдельных кнопок:
buttons: () => [
{
text: 'Назад',
action: tour.back,
enabled: () => appState.canGoBack
},
{
text: 'Далее',
action: tour.next,
enabled: () => appState.canProceed
}
]
Это позволяет создавать туры, полностью адаптирующиеся под текущие условия приложения и действия пользователя.
enabled удобно для временной блокировки
кнопок, без их удаления с интерфейса.addButton и removeButton
эффективно для динамических интерфейсов, где состояние шагов или
приложения меняется в реальном времени.Условное отображение кнопок в Shepherd.js обеспечивает гибкость управления пользовательским туром, позволяя создавать интерфейсы, адаптирующиеся под действия пользователя и текущее состояние приложения.