Для начала работы с Shepherd.js необходимо подключить библиотеку в проект. Она доступна через npm, yarn или CDN.
Установка через npm:
npm install shepherd.js
Подключение в проекте:
import Shepherd from 'shepherd.js';
import 'shepherd.js/dist/css/shepherd.css';
Использование CDN:
После подключения библиотека готова к использованию для создания интерактивных подсказок и туров по интерфейсу.
Тур создается через объект Shepherd.Tour, где можно
задать глобальные настройки:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: { beh * avior: 'smooth', block: 'center' }
},
useModalOverlay: true
});
Ключевые опции:
defaultStepOptions — общие параметры для всех
шагов.classes — стили для шагов.scrollTo — автоматическая прокрутка к целевому
элементу.useModalOverlay — затемнение фона вокруг
подсказки.Каждый шаг добавляется методом addStep и описывается
объектом с настройками.
tour.addStep({
id: 'step-1',
text: 'Это первый шаг тура.',
attachTo: {
element: '.button-start',
on: 'bottom'
},
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Далее',
action: tour.next
}
]
});
Основные свойства шага:
id — уникальный идентификатор шага.text — текст подсказки.attachTo — объект с элементом и позицией
(top, bottom, left,
right).buttons — массив кнопок с текстом и действием.highlightClass — CSS-класс для подсветки целевого
элемента.Shepherd.js позволяет полностью контролировать действия кнопок:
tour.next() — переход к следующему шагу.tour.back() — возврат к предыдущему шагу.tour.cancel() — завершение тура.tour.complete() — завершение тура и выполнение
колбэков.Можно добавлять кастомные функции:
buttons: [
{
text: 'Закрыть',
action() {
alert('Тур завершен');
tour.cancel();
}
}
]
Позиция шага относительно элемента задается в объекте
attachTo:
attachTo: {
element: '#menu',
on: 'right-start'
}
Возможные позиции:
top, bottom, left,
right — основные стороны.-start, -end для смещения по
краям.center — по центру элемента.Shepherd.js использует CSS-классы для изменения стиля:
shepherd-theme-arrows,
shepherd-theme-dark.classes.highlightClass.tour.addStep({
id: 'step-2',
text: 'Проверка стиля',
attachTo: { element: '#feature', on: 'top' },
classes: 'custom-step-style',
highlightClass: 'highlighted-element'
});
Shepherd.js поддерживает множество событий, позволяющих реагировать на действия пользователя:
tour.on('start', () => console.log('Тур начат'));
tour.on('complete', () => console.log('Тур завершен'));
tour.on('show', (step) => console.log(`Показан шаг: ${step.id}`));
Основные события:
start — начало тура.complete — успешное завершение.cancel — отмена тура.show — показ нового шага.hide — скрытие шага.Shepherd.js позволяет добавлять формы и интерактивные элементы прямо в шаги:
tour.addStep({
id: 'step-form',
text: '',
attachTo: { element: '#form-container', on: 'bottom' },
buttons: [
{
text: 'Сохранить',
action() {
const name = document.querySelector('#form-container input').value;
console.log(`Имя пользователя: ${name}`);
tour.next();
}
}
]
});
Опция useModalOverlay затемняет фон вокруг шагов,
улучшая концентрацию на подсказке:
const tour = new Shepherd.Tour({
useModalOverlay: true
});
Можно кастомизировать оверлей через CSS:
.shepherd-modal-overlay-container {
background-color: rgba(0, 0, 0, 0.6);
}
Shepherd.js поддерживает динамическое управление шагами:
tour.addStep({
id: 'conditional-step',
text: 'Выберите вариант',
buttons: [
{
text: 'Вариант 1',
action() {
tour.addStep({
id: 'extra-step',
text: 'Дополнительная подсказка для варианта 1'
});
tour.next();
}
},
{
text: 'Вариант 2',
action: tour.next
}
]
});
Это позволяет создавать разные ветви тура в зависимости от действий пользователя.
После добавления всех шагов тур запускается методом
start():
tour.start();
Можно проверять состояние тура:
if (!tour.isActive()) {
tour.start();
}
Shepherd.js легко интегрируется с React, Vue и Angular. Основная идея — создание тура в жизненном цикле компонента и управление его шагами через состояние приложения.
Пример для React:
import { useEffect } from 'react';
import Shepherd from 'shepherd.js';
function AppTour() {
useEffect(() => {
const tour = new Shepherd.Tour({ defaultStepOptions: { scrollTo: true } });
tour.addStep({ id: 'step-1', text: 'Первый шаг', attachTo: { element: '#start', on: 'bottom' }, buttons: [{ text: 'Далее', action: tour.next }] });
tour.start();
}, []);
}