В библиотеке Shepherd.js навигация по шагам тура строится вокруг стандартных кнопок Next и Back. Они обеспечивают линейное или частично нелинейное перемещение пользователя между шагами, формируя управляемый сценарий взаимодействия с интерфейсом.
Кнопки определяются в конфигурации каждого шага и могут быть гибко настроены: от простого перехода вперёд/назад до выполнения пользовательской логики перед сменой шага.
Кнопки задаются в массиве buttons внутри объекта
шага:
const tour = new Shepherd.Tour();
tour.addStep({
id: 'step-1',
text: 'Описание шага',
buttons: [
{
text: 'Next',
action: tour.next
}
]
});
Каждая кнопка — это объект со следующими основными свойствами:
Кнопка Next переводит тур на следующий шаг. В стандартной реализации используется метод:
action: tour.next
Пример с несколькими кнопками:
tour.addStep({
id: 'step-2',
text: 'Второй шаг',
buttons: [
{
text: 'Back',
action: tour.back
},
{
text: 'Next',
action: tour.next
}
]
});
Особенности:
idКнопка Back возвращает к предыдущему шагу:
action: tour.back
Особенности поведения:
Текст кнопок задаётся вручную и может быть локализован:
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Далее',
action: tour.next
}
]
Часто используется для адаптации интерфейса под язык приложения.
Порядок кнопок определяется их расположением в массиве:
buttons: [
{ text: 'Next', action: tour.next },
{ text: 'Back', action: tour.back }
]
В этом случае кнопка «Next» будет слева, а «Back» — справа.
Для визуального оформления используются CSS-классы:
buttons: [
{
text: 'Back',
action: tour.back,
classes: 'shepherd-button-secondary'
},
{
text: 'Next',
action: tour.next,
classes: 'shepherd-button-primary'
}
]
Также можно добавлять собственные классы:
classes: 'my-custom-button'
Флаг secondary: true применяется для визуального
различия:
{
text: 'Back',
action: tour.back,
secondary: true
}
Такая кнопка обычно имеет менее заметный стиль (например, серый цвет).
Кнопки могут добавляться динамически в зависимости от логики:
buttons: [
...(isFirstStep ? [] : [{
text: 'Back',
action: tour.back
}]),
{
text: 'Next',
action: tour.next
}
]
Типичные сценарии:
На последнем шаге вместо перехода вперёд используется завершение тура:
{
text: 'Finish',
action: tour.complete
}
Метод complete():
Кнопки могут выполнять произвольные действия:
{
text: 'Next',
action: () => {
console.log('Переход к следующему шагу');
tour.next();
}
}
Примеры использования:
Поддерживается выполнение асинхронной логики:
{
text: 'Next',
action: async () => {
await saveData();
tour.next();
}
}
Важно контролировать:
Shepherd.js напрямую не предоставляет API для disabled,
но можно реализовать через:
Пример:
{
text: 'Next',
action: () => {
if (!isValid) return;
tour.next();
},
classes: 'disabled-button'
}
Кнопка Back использует внутреннюю историю переходов. Это означает:
show(id) история
сохраняетсяВместо встроенных кнопок можно полностью управлять туром извне:
document.querySelector('#nextBtn').addEventListener('click', () => {
tour.next();
});
В таком случае массив buttons можно не использовать.
Первый шаг:
Последний шаг:
Отсутствие кнопок:
actionsecondary для визуального приоритета
действийtour.addStep({
id: 'example-step',
text: 'Пример шага с полной настройкой кнопок',
buttons: [
{
text: 'Назад',
action: tour.back,
classes: 'btn-back',
secondary: true
},
{
text: 'Далее',
action: () => {
console.log('Переход вперед');
tour.next();
},
classes: 'btn-next'
}
]
});
Такой подход позволяет гибко управлять навигацией, визуальным оформлением и логикой переходов между шагами тура.