Shepherd.js — это библиотека для создания интерактивных туров по веб-приложению. Она позволяет пошагово направлять пользователя по интерфейсу, акцентируя внимание на ключевых элементах и предоставляя полезные подсказки. Основные компоненты библиотеки включают тур, шаги (steps) и настройки шагов.
Создание тура начинается с создания экземпляра
Shepherd.Tour:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true,
cancelIcon: {
enabled: true
},
classes: 'shadow-md bg-purple-dark'
},
useModalOverlay: true
});
Ключевые моменты:
defaultStepOptions задаёт общие параметры для всех
шагов тура.scrollTo: true обеспечивает прокрутку к элементу перед
отображением подсказки.cancelIcon добавляет крестик для закрытия тура.classes позволяет применять кастомные стили к
подсказкам.useModalOverlay: true затемняет фон вокруг элемента,
повышая фокус пользователя.Каждый шаг создаётся методом addStep:
tour.addStep({
id: 'example-step',
text: 'Это пример подсказки для элемента.',
attachTo: {
element: '#example-element',
on: 'bottom'
},
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Далее',
action: tour.next
}
]
});
Разбор параметров:
id — уникальный идентификатор шага.text — текст подсказки. Можно использовать HTML для
форматирования.attachTo — объект, указывающий, к какому элементу
привязана подсказка и с какой стороны (top,
bottom, left, right).buttons — массив кнопок управления, каждая из которых
имеет text и action. Действия могут быть
встроенными (tour.next, tour.back) или
кастомными функциями.Shepherd.js поддерживает разные варианты позиционирования и стилей подсказок:
useModalOverlay
фон затемняется, подсветка остаётся на целевом элементе.Пример динамического позиционирования:
tour.addStep({
id: 'dynamic-step',
text: 'Подсказка может автоматически менять позицию.',
attachTo: {
element: '#dynamic-element',
on: 'auto'
}
});
Кнопки шагов можно настраивать с использованием встроенных методов или кастомных функций:
tour.addStep({
id: 'custom-buttons',
text: 'Кнопка выполняет кастомное действие',
buttons: [
{
text: 'Закрыть',
action: () => {
console.log('Тур закрыт');
tour.cancel();
}
}
]
});
Дополнительно можно использовать события тура:
tour.on('start', () => console.log('Тур начался'));
tour.on('complete', () => console.log('Тур завершён'));
tour.on('cancel', () => console.log('Тур отменён'));
События позволяют интегрировать тур с логикой приложения, например, отслеживать завершение для аналитики.
Shepherd.js поддерживает разделение шагов на группы для сложных туров. Это позволяет:
Пример условного добавления шагов:
if (user.isAdmin) {
tour.addStep({
id: 'admin-step',
text: 'Это шаг для администратора',
attachTo: { element: '#admin-panel', on: 'right' }
});
}
Shepherd.js использует CSS-классы для управления внешним видом:
classes — применяются к контейнеру подсказки.tetherOptions — позволяет тонко настраивать
позиционирование через Tether.js.Пример с кастомной анимацией:
tour.addStep({
id: 'animated-step',
text: 'Подсказка с анимацией появления',
attachTo: { element: '#animated-element', on: 'top' },
classes: 'fade-in-slide'
});
Основные методы управления туром:
tour.start() — запускает тур с первого шага.tour.next() и tour.back() — переходы между
шагами.tour.cancel() — отменяет тур и закрывает все
подсказки.tour.complete() — завершает тур и генерирует событие
complete.tour.show(stepId) — показывает конкретный шаг по
идентификатору.Shepherd.js можно использовать для:
when или колбэки в кнопках.Пример ожидания действия пользователя:
tour.addStep({
id: 'wait-action',
text: 'Нажмите кнопку, чтобы продолжить',
attachTo: { element: '#action-btn', on: 'bottom' },
buttons: [
{
text: 'Жду',
action: () => {} // пустая функция, шаг завершится вручную
}
]
});
document.querySelector('#action-btn').addEventListener('click', () => tour.next());
Shepherd.js легко интегрируется с популярными фреймворками:
mounted или
реактивно через ref.ngAfterViewInit с привязкой к элементам через
@ViewChild.Особенности интеграции:
Shepherd.js обеспечивает гибкость и контроль над пользовательскими турами, позволяя создавать как простые подсказки, так и сложные интерактивные пошаговые инструкции.