Shepherd.js предоставляет возможность управлять последовательностью шагов в интерактивных турах динамически. Это особенно полезно, когда необходимо подстраиваться под состояние приложения, загружать контент асинхронно или менять путь пользователя в зависимости от его действий.
Для начала создается экземпляр тура с базовыми настройками:
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: {
enabled: true
},
classes: 'shepherd-theme-arrows',
scrollTo: { beh * avior: 'smooth', block: 'center' }
}
});
defaultStepOptions задает параметры, которые
применяются ко всем шагам по умолчанию.cancelIcon позволяет пользователю закрывать шаги.classes определяет визуальную тему.scrollTo отвечает за плавную прокрутку к целевому
элементу.Шаги можно добавлять после создания экземпляра тура с помощью метода
addStep:
tour.addStep({
id: 'dynamic-step-1',
text: 'Этот шаг добавлен динамически',
attachTo: {
element: '.dynamic-element',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
id уникально идентифицирует шаг.attachTo указывает на элемент и позицию шага
относительно него.buttons определяет кнопки навигации для шага.Метод addStep можно вызывать несколько раз в процессе
работы приложения, что позволяет создавать полностью динамический
маршрут тура.
Иногда шаги должны отображаться только при определенных условиях:
if (document.querySelector('.feature-available')) {
tour.addStep({
id: 'feature-step',
text: 'Этот шаг показывается только если доступна функция',
attachTo: { element: '.feature-available', on: 'right' },
buttons: [
{ text: 'Закрыть', action: tour.cancel }
]
});
}
Таким образом можно строить интерактивный тур, который подстраивается под состояние интерфейса и доступный функционал.
Если контент загружается динамически (например, через fetch или API), шаги можно создавать после получения данных:
fetch('/api/getTourSteps')
.then(response => response.json())
.then(steps => {
steps.forEach(step => {
tour.addStep({
id: step.id,
text: step.text,
attachTo: { element: step.selector, on: step.position },
buttons: [
{ text: 'Далее', action: tour.next }
]
});
});
});
Shepherd.js поддерживает метод steps для работы с
массивом шагов. Чтобы вставить новый шаг между существующими,
используется массив:
const newStep = {
id: 'inserted-step',
text: 'Этот шаг вставлен между другими',
attachTo: { element: '.insert-here', on: 'top' },
buttons: [{ text: 'Далее', action: tour.next }]
};
tour.steps.splice(1, 0, newStep);
splice(1, 0, newStep) вставляет шаг на вторую позицию
(индекс 1).tour.start().Помимо добавления, Shepherd.js позволяет модифицировать уже добавленные шаги:
const step = tour.getById('dynamic-step-1');
if (step) {
step.updateStepOptions({
text: 'Текст шага обновлен динамически',
buttons: [
{ text: 'Назад', action: tour.back },
{ text: 'Далее', action: tour.next }
]
});
}
updateStepOptions позволяет изменить текст,
кнопки, позицию и другие параметры.После добавления шагов можно сразу перейти к ним:
tour.addStep({
id: 'next-step',
text: 'Следующий динамический шаг',
attachTo: { element: '.next-element', on: 'bottom' },
buttons: [{ text: 'Закрыть', action: tour.next }]
});
tour.show('next-step');
tour.show(id) позволяет открыть конкретный шаг без
необходимости перезапуска всего тура.id для каждого шага.attachTo) для предотвращения ошибок.MutationObserver
или события загрузки данных для корректного добавления шагов.Динамическое добавление шагов в Shepherd.js позволяет создавать адаптивные, интерактивные и контекстно-зависимые туры, которые подстраиваются под реальное состояние интерфейса и поведения пользователя.