Shepherd.js предоставляет гибкую систему создания интерактивных туров по веб-приложению. Центральным элементом управления ходом тура является strategy — набор правил и методов, определяющих, как пользователь перемещается между шагами и как управляется логика показа каждого шага. Понимание и правильная настройка стратегии позволяет создавать сложные, динамичные и отзывчивые туры.
В Shepherd.js стратегия задается через объект
defaultStepOptions и методы класса Tour.
Основные типы стратегии включают:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true,
cancelIcon: {
enabled: true
}
}
});
tour.addStep({
id: 'step-1',
text: 'Приветствие пользователя',
attachTo: { element: '#welcome', on: 'bottom' },
buttons: [
{ text: 'Далее', action: tour.next }
]
});
beforeShowPromise или кастомная логика
кнопок:tour.addStep({
id: 'step-conditional',
text: 'Выбор дальнейшего пути',
attachTo: { element: '#menu', on: 'right' },
buttons: [
{
text: 'Продолжить путь A',
action: () => {
if (userChoice === 'A') {
tour.show('step-a');
} else {
tour.show('step-b');
}
}
}
]
});
beforeShowPromise возвращается
промис:tour.addStep({
id: 'step-async',
text: 'Загрузка данных...',
attachTo: { element: '#data', on: 'top' },
beforeShowPromise: () => fetch('/api/data')
.then(response => response.json())
.then(data => {
document.querySelector('#data').textContent = data.message;
})
});
Навигация между шагами может быть более тонкой:
tour.back() позволяет пользователю перемещаться назад, при
этом стратегия может ограничивать количество возвратов.buttons: [
{ text: 'Назад', action: tour.back },
{ text: 'Вперед', action: tour.next }
]
Стратегия навигации тесно связана с управлением фокусом на DOM-элементы:
Пример настройки фокуса на активный элемент:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: { beh * avior: 'smooth', block: 'center' },
highlightClass: 'highlight-step'
}
});
Стратегия может включать динамическое формирование тура в зависимости от состояния приложения:
if (userHasFeatureX) {
tour.addStep({
id: 'feature-x-step',
text: 'Объяснение функции X',
attachTo: { element: '#feature-x', on: 'bottom' },
buttons: [{ text: 'Далее', action: tour.next }]
});
}
Это позволяет строить тур, который адаптируется под конкретного пользователя.
Можно создавать стратегии, которые реагируют на пользовательские данные или поведение:
if (localStorage.getItem('tourCompleted')) {
tour.start(false); // пропустить часть шагов
} else {
tour.start();
}
Стратегия навигации в Shepherd.js формируется через комбинацию:
defaultStepOptionstour.next(), tour.back(),
tour.show(stepId)beforeShowPromiseЭта гибкость позволяет создавать как простые линейные туры, так и сложные интерактивные гиды с ветвлениями, условными переходами и реакцией на действия пользователя.