В библиотеке Shepherd.js тур начинается с создания экземпляра объекта
Shepherd.Tour. Основной метод — конструктор
new Shepherd.Tour(options), где options — это
объект с глобальными настройками тура. Среди ключевых параметров:
Пример создания тура:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true,
},
useModalOverlay: true,
tourName: 'introTour'
});
Шаги добавляются с помощью метода addStep. Каждый шаг —
это объект с обязательными и необязательными свойствами:
show,
hide, complete).Пример шага с навигационными кнопками:
tour.addStep({
id: 'welcome',
text: 'Добро пожаловать! Это первый шаг тура.',
attachTo: {
element: '.header-logo',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
},
{
text: 'Пропустить',
action: tour.cancel
}
]
});
Жизненный цикл тура включает следующие ключевые этапы: инициализация, показ шагов, переход между шагами, завершение и отмена.
Метод tour.start() запускает тур. Если указаны шаги, он
автоматически покажет первый шаг и выполнит все события, привязанные к
before-show и show.
tour.next() — переход к следующему шагу. Если шаг
последний, вызовет событие complete.tour.back() — возвращение к предыдущему шагу.tour.show(stepId) — отображение конкретного шага по
идентификатору.Эти методы триггерят события жизненного цикла шага:
show — шаг становится видимым.hide — шаг скрыт.complete — последний шаг завершён.tour.complete() — завершает тур, вызывает все события
завершения и снимает модальные оверлеи.tour.cancel() — прерывает тур в любой момент,
срабатывают события отмены.Пример подписки на события:
tour.on('complete', () => {
console.log('Тур завершён');
});
tour.on('cancel', () => {
console.log('Тур отменён');
});
tour.on('show', (step) => {
console.log(`Показан шаг: ${step.id}`);
});
Shepherd.js позволяет сохранять состояние прохождения тура. Это полезно для многошаговых интерактивных инструкций, чтобы при повторном посещении страницы пользователь не проходил уже пройденные шаги.
tour.currentStep — текущий шаг.tour.steps — массив всех шагов.tour.isActive() — возвращает true, если тур
активен.tour.cancel() и tour.complete() очищают
активное состояние.Состояние можно хранить локально, используя
localStorage:
tour.on('complete', () => {
localStorage.setItem('tourCompleted', 'true');
});
if (!localStorage.getItem('tourCompleted')) {
tour.start();
}
Шаги могут добавляться или изменяться во время выполнения тура. Для этого используются методы:
addStep() — добавление нового шага.removeStep(stepId) — удаление существующего шага.updateStepOptions(stepId, options) — обновление
параметров шага на лету.Пример динамического добавления шага:
tour.addStep({
id: 'dynamicStep',
text: 'Этот шаг был добавлен во время тура.',
attachTo: { element: '.dynamic-element', on: 'top' },
buttons: [{ text: 'Далее', action: tour.next }]
});
Для корректного отображения туров важно, чтобы элементы, к которым
привязываются подсказки, существовали в момент вызова
attachTo. В противном случае шаг не отобразится. Если
элементы создаются динамически, следует использовать события загрузки
контента или MutationObserver для отслеживания появления элементов перед
показом шага.
Shepherd.js поддерживает колбэки для каждого шага и тура в целом:
Пример использования колбэков для изменения контента перед показом:
tour.addStep({
id: 'stepWithCallback',
text: 'Изначальный текст',
attachTo: { element: '.header', on: 'bottom' },
when: {
show: () => {
const step = tour.getCurrentStep();
step.updateStepOptions({ text: 'Текст обновлён перед показом' });
}
}
});
Shepherd.js автоматически прокручивает страницу к элементу, если
scrollTo: true. Для тонкой настройки можно использовать
CSS-анимации, классы шагов и события show/hide
для добавления кастомных анимаций.
Этот подробный разбор жизненного цикла тура в Shepherd.js охватывает все ключевые моменты: от создания тура и добавления шагов до управления событиями и динамических изменений. Такой подход позволяет создавать интерактивные, гибкие и полностью управляемые пользовательские туры в веб-приложениях.