В Shepherd.js навигация между шагами реализуется
через встроенные методы экземпляра тура. Каждый шаг определяется
объектом конфигурации с уникальным идентификатором (id) и
набором опций, включая текст, привязку к элементу DOM и кнопки
управления. Перемещение между шагами может быть как автоматическим, так
и управляемым пользователем.
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true
}
});
tour.addStep({
id: 'step-1',
text: 'Это первый шаг',
attachTo: { element: '#first', on: 'bottom' },
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
tour.addStep({
id: 'step-2',
text: 'Это второй шаг',
attachTo: { element: '#second', on: 'top' },
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Завершить',
action: tour.complete
}
]
});
Методы tour.next(), tour.back() и
tour.complete() позволяют управлять последовательностью
шагов. Важно отметить, что каждый шаг должен быть добавлен в тур
до вызова этих методов, иначе навигация не будет работать
корректно.
Экземпляр тура предоставляет доступ к текущему шагу через метод
tour.getCurrentStep(). Этот метод возвращает объект
текущего шага, позволяя динамически изменять его контент, кнопки или
привязку.
const currentStep = tour.getCurrentStep();
currentStep.updateStepOptions({
text: 'Обновленный текст шага',
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
Использование этого подхода особенно полезно, когда требуется динамически менять инструкции в зависимости от состояния страницы или действий пользователя.
Shepherd.js позволяет переходить к конкретному шагу без следования
последовательности с помощью метода
tour.show('step-id').
tour.show('step-2');
Метод show автоматически скрывает текущий шаг и
отображает указанный, что делает возможным реализацию условной
навигации, например, пропуск определённых шагов для опытных
пользователей.
Иногда необходимо переключение шагов без участия пользователя. Для
этого используется коллбэк when или события шага:
tour.addStep({
id: 'auto-step',
text: 'Следующий шаг появится через 3 секунды',
buttons: [],
when: {
show: () => setTimeout(() => tour.next(), 3000)
}
});
Событие show вызывается при отображении шага, а
hide — при его скрытии. Это позволяет программно управлять
навигацией и синхронизировать её с внешними процессами на странице.
Каждая кнопка в шаге имеет обязательный параметр action,
который указывает функцию, вызываемую при нажатии. Помимо стандартных
tour.next() и tour.back(), можно использовать
произвольные функции:
buttons: [
{
text: 'Сохраниить и далее',
action: function() {
saveData();
tour.next();
}
}
]
Также кнопки могут быть скрыты или динамически добавлены с помощью
методов шага, например step.addButton() и
step.removeButton(). Это позволяет создавать сложные
сценарии с условной логикой переходов.
Shepherd.js предоставляет богатый набор событий, связанных с навигацией:
show — шаг отображается;hide — шаг скрывается;complete — тур завершён;cancel — тур прерван пользователем.Подписка на события осуществляется через метод
tour.on:
tour.on('show', (step) => {
console.log(`Отображен шаг: ${step.id}`);
});
События позволяют отслеживать поведение пользователя и программно изменять последовательность шагов, например, пропускать шаги при определённых условиях.
Навигация может зависеть от состояния приложения. С помощью условных
проверок и метода tour.show() можно реализовать ветвление
маршрута:
if (user.isAdvanced()) {
tour.show('advanced-step');
} else {
tour.show('basic-step');
}
Это делает Shepherd.js гибким инструментом для создания адаптивных интерактивных инструкций.
tour.next() и tour.back() для
линейной навигации.tour.show('step-id') для перехода к
произвольному шагу.getCurrentStep() для
гибкости.show, hide,
complete для синхронизации с внешними действиями.Эти методы обеспечивают полное управление ходом интерактивного тура и позволяют создавать как простые последовательные инструкции, так и сложные адаптивные маршруты с ветвлениями.