Shepherd.js — это библиотека для создания интерактивных туров и
контекстной помощи в веб-приложениях на JavaScript. Основная концепция
библиотеки строится вокруг туров (Tour) и
шагов (Step). Каждый шаг представляет
собой подсказку, которая отображается в определённой части интерфейса и
может содержать текст, кнопки управления, а также действия при переходе
или закрытии.
Создание нового тура начинается с инициализации объекта
Shepherd.Tour с набором опций:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true,
cancelIcon: {
enabled: true
}
},
useModalOverlay: true
});
defaultStepOptions задаёт базовые настройки для всех
шагов.classes — CSS-класс для оформления подсказки.scrollTo автоматически прокручивает страницу к элементу
шага.cancelIcon добавляет крестик для закрытия шага.useModalOverlay затемняет остальную часть страницы,
акцентируя внимание на текущем элементе.Добавление шагов производится методом addStep:
tour.addStep({
id: 'welcome',
text: 'Добро пожаловать в приложение! Здесь вы найдёте основные функции.',
attachTo: {
element: '#main-menu',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
id уникально идентифицирует шаг.text — содержимое подсказки.attachTo связывает подсказку с конкретным элементом DOM
и указывает положение.buttons позволяет создавать навигацию по туру,
используя встроенные методы tour.next,
tour.back и tour.cancel.Shepherd.js предоставляет гибкий механизм управления шагами через события. Для каждого шага можно задавать обработчики событий:
tour.on('start', () => console.log('Тур начат'));
tour.on('complete', () => console.log('Тур завершён'));
tour.on('cancel', () => console.log('Тур прерван'));
Шаги также могут иметь локальные события:
tour.addStep({
id: 'feature',
text: 'Эта кнопка открывает панель настроек.',
attachTo: { element: '#settings-btn', on: 'right' },
when: {
show: () => console.log('Шаг показан'),
hide: () => console.log('Шаг скрыт')
}
});
when.show выполняется при отображении шага.when.hide выполняется при скрытии шага.Это позволяет интегрировать интерактивные действия, например подсветку элементов интерфейса или запуск анимаций.
Кнопки шага поддерживают множество конфигураций, включая произвольные функции:
buttons: [
{
text: 'Назад',
action: tour.back,
classes: 'shepherd-button-secondary'
},
{
text: 'Далее',
action: () => {
console.log('Переход к следующему шагу');
tour.next();
},
classes: 'shepherd-button-primary'
},
{
text: 'Закрыть',
action: tour.cancel,
classes: 'shepherd-button-danger'
}
]
classes позволяет задать визуальный стиль кнопок.action может быть функцией, которая выполняется при
нажатии, что делает поведение кнопок полностью настраиваемым.Shepherd.js использует библиотеку Popper.js для расчёта позиции
подсказки. attachTo позволяет привязать шаг к элементу и
указать направление:
attachTo: {
element: '#profile-pic',
on: 'left'
}
Возможные значения on:
topbottomleftrightДля динамических интерфейсов можно использовать селекторы или DOM-элементы, полученные программно, что позволяет адаптировать тур под разные состояния страницы.
Включение useModalOverlay создаёт затемнённый фон и
блокирует взаимодействие с другими элементами страницы, кроме текущего
шага. Для отдельных шагов можно использовать свойство
modal: true, чтобы акцентировать внимание на конкретной
области:
tour.addStep({
id: 'important-step',
text: 'Это ключевая функция приложения.',
attachTo: { element: '#key-feature', on: 'top' },
modal: true
});
Это создаёт визуальный эффект «фокусировки» на элементе, улучшая восприятие контекстной помощи.
Shepherd.js поддерживает динамическое добавление, удаление и изменение шагов во время работы тура:
tour.addStep({
id: 'extra-step',
text: 'Этот шаг добавлен в процессе выполнения тура.'
});
tour.removeStep('extra-step');
const step = tour.getById('welcome');
step.updateStepOptions({ text: 'Обновлённый текст шага' });
getById возвращает объект шага для изменения его
свойств.updateStepOptions позволяет менять текст, кнопки и
привязку без перезапуска тура.Можно создавать шаги, которые отображаются только при определённых условиях:
tour.addStep({
id: 'conditional-step',
text: 'Этот шаг виден только если пользователь вошёл в систему.',
beforeShowPromise: () => {
return new Promise((resolve) => {
if (user.isLoggedIn) resolve();
else tour.next();
});
}
});
beforeShowPromise позволяет выполнить асинхронную
проверку перед показом шага.tour.next().Shepherd.js поддерживает полное кастомное оформление через CSS:
.shepherd-theme-arrows .shepherd-button-primary {
background-color: #1e90ff;
color: #fff;
}
.shepherd-theme-arrows .shepherd-cancel-icon {
fill: #ff4500;
}
Туры Shepherd.js легко подключаются к SPA (Single Page Application) на Vue, React или Angular. Основной подход заключается в запуске тура после рендера компонентов и привязке шагов к DOM-элементам с актуальными селекторами:
import Shepherd from 'shepherd.js';
const tour = new Shepherd.Tour({ useModalOverlay: true });
// добавление шагов после рендера
setTimeout(() => {
tour.start();
}, 500);
nextTick гарантирует, что
элементы будут доступны для привязки.Эти возможности делают Shepherd.js мощным инструментом для создания контекстной помощи, интерактивных туров и образовательных интерфейсов с полным контролем над поведением и внешним видом каждого шага.