Shepherd.js — это библиотека JavaScript для создания интерактивных пошаговых туров по веб-приложениям. Она позволяет выделять элементы интерфейса, добавлять подсказки и навигацию, управлять последовательностью шагов и настраивать визуальные эффекты.
Shepherd.js можно подключить двумя способами:
npm install shepherd.js
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/shepherd.js/dist/css/shepherd.css" />
<script src="https://cdn.jsdelivr.net/npm/shepherd.js/dist/js/shepherd.min.js"></script>
После подключения необходимо создать экземпляр тура:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true,
cancelIcon: {
enabled: true
}
}
});
defaultStepOptions задаёт параметры по умолчанию для
всех шагов, включая прокрутку к элементу и возможность закрыть шаг.
Каждый шаг добавляется с помощью метода addStep.
Основные параметры шага:
id — уникальный идентификатор шага.text — текст подсказки, поддерживает HTML.attachTo — объект
{element: 'селектор', on: 'позиция'} для привязки подсказки
к элементу.buttons — массив кнопок для навигации.Пример:
tour.addStep({
id: 'step-1',
text: 'Это главный элемент интерфейса.',
attachTo: {
element: '#main-button',
on: 'bottom'
},
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Вперёд',
action: tour.next
}
]
});
Кнопки можно настраивать с любыми функциями, включая вызов пользовательских обработчиков.
Shepherd.js поддерживает несколько позиций относительно элемента:
top, bottom, left,
righttop-start, top-end,
bottom-start, bottom-endleft-start, left-end,
right-start, right-endПозицию можно изменять динамически через параметр
attachTo.on.
Shepherd.js использует классы CSS, которые можно переопределять:
.shepherd-element — основной контейнер подсказки..shepherd-header — заголовок шага..shepherd-content — текст подсказки..shepherd-footer — область кнопок.Пример кастомизации:
.shepherd-element {
background-color: #2a2a2a;
color: #fff;
border-radius: 8px;
padding: 15px;
}
.shepherd-button {
background-color: #ff6600;
color: white;
border: none;
padding: 8px 12px;
border-radius: 4px;
}
Основные методы тура:
tour.start() — запуск тура.tour.next() — переход к следующему шагу.tour.back() — возвращение к предыдущему шагу.tour.cancel() — немедленное завершение тура.tour.complete() — завершение тура с вызовом
событий.Shepherd.js поддерживает события:
show — шаг отображен.hide — шаг скрыт.complete — тур завершен.cancel — тур отменен.Пример подписки на событие:
tour.on('complete', () => {
console.log('Тур завершён успешно.');
});
Для сложных сценариев можно использовать условные переходы:
tour.addStep({
id: 'step-conditional',
text: 'Выберите вариант для продолжения.',
buttons: [
{
text: 'Вариант 1',
action: () => {
tour.next('step-variant-1');
}
},
{
text: 'Вариант 2',
action: () => {
tour.next('step-variant-2');
}
}
]
});
Здесь next('step-variant-1') указывает на конкретный
следующий шаг по ID, позволяя создавать ветвящиеся туры.
Shepherd.js легко интегрируется с React, Vue и Angular. Основная стратегия:
Пример для React:
import Shepherd from 'shepherd.js';
import 'shepherd.js/dist/css/shepherd.css';
import { useEffect } from 'react';
function AppTour() {
useEffect(() => {
const tour = new Shepherd.Tour({
defaultStepOptions: { scrollTo: true }
});
tour.addStep({
id: 'welcome',
text: 'Добро пожаловать!',
buttons: [{ text: 'Далее', action: tour.next }]
});
tour.start();
}, []);
return null;
}
Shepherd.js автоматически скроллит страницу к элементу через
scrollTo: true. Для более сложных случаев можно
использовать beforeShowPromise для асинхронного ожидания
загрузки элементов:
tour.addStep({
id: 'async-step',
text: 'Элемент будет доступен через 1 секунду.',
attachTo: { element: '#async-element', on: 'top' },
beforeShowPromise: () => new Promise(resolve => setTimeout(resolve, 1000)),
buttons: [{ text: 'Далее', action: tour.next }]
});
Shepherd.js позволяет использовать HTML в тексте шагов:
tour.addStep({
id: 'html-step',
text: '<strong>Важно:</strong> выполните это действие.',
buttons: [{ text: 'Понятно', action: tour.next }]
});
Для локализации достаточно формировать текст шагов динамически или подключать внешние ресурсы с переводами.
Помимо стандартных next и back, можно
создавать свои действия:
tour.addStep({
id: 'custom-step',
text: 'Нажмите кнопку для выполнения действия.',
buttons: [
{
text: 'Скрыть элемент',
action: () => {
document.querySelector('#special').style.display = 'none';
tour.next();
}
}
]
});
Shepherd.js поддерживает расширение через плагины для анимаций, кастомных стилей и интеграции с библиотеками управления состоянием. Можно подключать сторонние библиотеки, например, Popper.js, для точного позиционирования.
Если нужно, могу продолжить с разделами «Оптимизация производительности и управление большим количеством шагов» и «Сложные сценарии туров с условиями и ветвлениями», где подробно разбирается продвинутое использование Shepherd.js в реальных проектах.
Хотите, чтобы я добавил эти разделы?