Shepherd.js — это мощная библиотека для создания интерактивных руководств по пользовательскому интерфейсу в веб-приложениях. В её основе лежит объект Tour, который управляет последовательностью шагов (steps) и настройками отображения каждого шага. Для начала работы создаётся экземпляр тура:
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: {
enabled: true
},
scrollTo: { beh * avior: 'smooth', block: 'center' }
},
useModalOverlay: true
});
Пояснения к ключевым настройкам:
defaultStepOptions — объект, задающий базовые параметры
для всех шагов: наличие кнопки закрытия, поведение прокрутки к элементу
и прочее.useModalOverlay — затемняет фон во время тура, повышая
фокус на активном шаге.После создания тура добавляются шаги через метод
addStep:
tour.addStep({
id: 'step-1',
text: 'Это первый шаг тура',
attachTo: { element: '#button1', on: 'bottom' },
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
Ключевые параметры шага:
id — уникальный идентификатор шага.text — текст, отображаемый в подсказке. Можно
использовать HTML.attachTo — объект с элементом DOM и позицией подсказки
относительно него (top, bottom,
left, right).buttons — массив кнопок с действиями. Основные методы:
tour.next(), tour.back(),
tour.cancel().Shepherd.js позволяет динамически управлять ходом тура. Можно задавать условные переходы, показывать шаги только при определённых условиях:
tour.addStep({
id: 'conditional-step',
text: 'Этот шаг виден только если пользователь вошёл в систему',
when: {
show: () => {
return user.isLoggedIn;
}
},
buttons: [{ text: 'Далее', action: tour.next }]
});
Метод when позволяет прикреплять коллбеки к
событиям шага, например: show, hide,
complete. Это позволяет интегрировать тур с внутренней
логикой приложения.
Каждый шаг можно детально настраивать через параметры:
classes: 'custom-step highlight' позволяет подключать CSS
для визуального оформления.width,
height, maxWidth управляют размерами
подсказки.beforeShowPromise позволяет выполнять асинхронные действия
перед отображением шага, например, подгрузку данных или открытие
модального окна.tour.addStep({
id: 'async-step',
text: 'Дождитесь загрузки данных...',
beforeShowPromise: () => fetchData(),
attachTo: { element: '#data-container', on: 'top' },
buttons: [{ text: 'Далее', action: tour.next }]
});
Shepherd.js предоставляет обширный API для управления турами:
tour.start() — запуск тура с первого шага или
указанного.tour.next() — переход к следующему шагу.tour.back() — возврат к предыдущему шагу.tour.cancel() — отмена и закрытие тура.tour.show(id) — показать шаг по id.Для сохранения прогресса можно интегрировать тур с локальным хранилищем:
tour.on('complete', () => {
localStorage.setItem('tourCompleted', 'true');
});
if (!localStorage.getItem('tourCompleted')) {
tour.start();
}
1. Разделение тура на модули: При сложном интерфейсе лучше создавать несколько туров для отдельных разделов. Это повышает читаемость кода и управляемость:
const dashboardTour = new Shepherd.Tour({...});
const settingsTour = new Shepherd.Tour({...});
2. Динамическое создание шагов: Шаги можно генерировать на лету, основываясь на состоянии DOM или данных пользователя:
document.querySelectorAll('.feature').forEach((el, i) => {
tour.addStep({
id: `feature-${i}`,
text: `Описание функции ${i+1}`,
attachTo: { element: el, on: 'right' },
buttons: [{ text: 'Далее', action: tour.next }]
});
});
3. Интеграция с роутером: В SPA часто требуется,
чтобы шаги показывались только на определённых маршрутах. Для этого
используют события роутера и методы show и
hide шагов.
4. Адаптивное позиционирование: Shepherd.js автоматически корректирует позицию подсказки при переполнении экрана, но можно вручную задавать fallback позиции:
attachTo: {
element: '#menu',
on: 'left',
fallback: ['top', 'bottom']
}
Эти возможности позволяют строить комплексные и интерактивные туры, полностью адаптированные под структуру веб-приложения, с управлением шагами, динамическим контентом и интеграцией с бизнес-логикой.