Shepherd.js — это библиотека для создания пошаговых интерактивных
руководств по интерфейсу. Она позволяет легко создавать туры,
подсвечивать элементы страницы и управлять последовательностью шагов.
Центральным объектом является Shepherd.Tour, который
управляет всеми шагами и настройками.
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: {
enabled: true
},
scrollTo: { beh * avior: 'smooth', block: 'center' }
},
useModalOverlay: true
});
Пояснение ключевых настроек:
defaultStepOptions — задаёт базовые параметры для всех
шагов тура, включая кнопку закрытия (cancelIcon) и
прокрутку (scrollTo).useModalOverlay — затемняет остальную часть страницы,
фокусируя внимание на активном элементе.Каждый шаг создаётся методом addStep, принимающим объект
с обязательными и опциональными параметрами:
tour.addStep({
id: 'intro',
text: 'Добро пожаловать в наш интерфейс!',
attachTo: {
element: '#start-button',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
Основные параметры шага:
id — уникальный идентификатор шага.text — текстовое содержимое, поддерживает HTML.attachTo — объект, указывающий элемент и позицию
подсказки относительно него (on может быть
top, bottom, left,
right).buttons — массив объектов с настройками кнопок
(text, action, classes).Дополнительно шаги могут содержать:
advanceOn — событие, после которого шаг автоматически
переключается.highlightClass — CSS-класс, который добавляется к
целевому элементу.Методы управления туром позволяют гибко контролировать поведение:
tour.start(); // Запуск тура с первого шага
tour.next(); // Переход к следующему шагу
tour.back(); // Возврат к предыдущему шагу
tour.cancel(); // Прерывание тура
tour.complete(); // Завершение тура
Особенности поведения:
start() тур автоматически отображает первый
шаг.next() и back() учитывают логику
последовательности шагов, которую можно задавать с помощью
step.showNext() или step.showPrevious().Shepherd.js поддерживает динамическое управление шагами. Шаги можно добавлять в процессе выполнения:
tour.addStep({
id: 'dynamic-step',
text: 'Этот шаг появился динамически!',
attachTo: { element: '#dynamic-element', on: 'top' },
buttons: [{ text: 'Закрыть', action: tour.complete }]
});
Удаление шага выполняется методом removeStep:
tour.removeStep('dynamic-step');
Это полезно для туров с условными сценариями, где шаги зависят от действий пользователя.
Понятие active step (активный шаг) — центральное для Shepherd.js. Активный шаг — это шаг, который в данный момент отображается на странице. Его можно получить и управлять им напрямую:
const currentStep = tour.getCurrentStep();
currentStep.updateStepOptions({ text: 'Обновленный текст для текущего шага' });
Методы работы с активным шагом:
show() — отображает шаг, делая его активным.hide() — скрывает шаг без завершения тура.scrollTo() — прокручивает страницу так, чтобы элемент
шага был виден.updateStepOptions() — позволяет изменить текст, кнопки
или позицию на лету.Shepherd.js поддерживает события для шагов, которые удобно использовать для логирования или динамического изменения интерфейса:
tour.on('show', (event) => {
console.log(`Активный шаг: ${event.step.id}`);
});
tour.on('complete', () => {
console.log('Тур завершён');
});
События, связанные с активным шагом:
show — шаг становится активным.hide — шаг скрывается.cancel — тур был прерван пользователем.complete — тур полностью завершён.Эти события позволяют создавать сложные интерактивные сценарии и интегрировать туры с внутренней логикой приложения.
Для акцентирования внимания на активном шаге можно использовать подсветку:
tour.addStep({
id: 'highlighted',
text: 'Обратите внимание на этот элемент!',
attachTo: { element: '#important', on: 'right' },
highlightClass: 'shepherd-highlight'
});
CSS-класс shepherd-highlight может содержать любые
стили, например рамку, тень или анимацию. Shepherd.js автоматически
добавляет этот класс при активации шага и удаляет при переходе к
следующему.
Активный шаг может автоматически скроллиться в видимую область:
tour.addStep({
id: 'scroll-step',
text: 'Элемент будет автоматически виден.',
attachTo: { element: '#offscreen', on: 'top' },
scrollTo: true
});
scrollTo: true прокручивает страницу к элементу.{ beh * avior: 'smooth', block: 'center' } для плавного
перемещения.Shepherd.js эффективно работает с динамическим контентом, создаваемым через фреймворки вроде Vue, React или Angular. Для корректной работы с динамическими элементами:
show для проверки видимости
элемента и вызова scrollTo().tour.on('show', (event) => {
const el = document.querySelector(event.step.options.attachTo.element);
if (el) event.step.scrollTo();
});
Это обеспечивает корректное отображение активного шага даже при асинхронной загрузке компонентов.