Shepherd.js — это библиотека для создания интерактивных шагов-подсказок (tours) на веб-страницах. Она позволяет последовательно выделять элементы интерфейса и сопровождать пользователя пояснительным текстом. Основной объект библиотеки — Shepherd.Tour, через который создаются шаги, управляется навигация и настраивается визуальное оформление.
Создание тура начинается с нового экземпляра:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true
}
});
Каждый шаг создаётся методом addStep и настраивается
объектом с ключевыми свойствами:
tour.addStep({
id: 'example-step',
text: 'Это пример подсказки для кнопки',
attachTo: {
element: '#myButton',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
},
{
text: 'Закрыть',
action: tour.cancel
}
]
});
top, bottom,
left, right).tour.next, tour.back,
tour.cancel).Shepherd.js поддерживает полный контроль над последовательностью шагов:
tour.start() — запускает тур с первого шага.tour.next() — переходит к следующему шагу.tour.back() — возвращается к предыдущему шагу.tour.cancel() — полностью завершает тур.tour.complete() — завершает тур и выполняет все
обработчики завершения.Библиотека предоставляет несколько способов кастомизации:
shepherd-theme-arrows,
shepherd-theme-default,
shepherd-theme-dark.classes можно
добавить свои CSS-стили.width,
padding, arrow позволяют настроить размеры и
направление стрелки подсказки.tour.addStep({
id: 'custom-style',
text: 'Шаг с кастомными стилями',
classes: 'custom-step',
attachTo: { element: '#element', on: 'top' },
width: 300
});
Shepherd.js поддерживает события для каждого шага и для всего тура:
show — шаг отображается.hide — шаг скрывается.complete — тур завершён.cancel — тур отменён.Пример использования событий:
tour.on('complete', () => {
console.log('Тур завершён');
});
tour.addStep({
id: 'step-with-event',
text: 'Шаг с событием',
buttons: [
{ text: 'Далее', action: tour.next }
],
when: {
show: () => console.log('Показан этот шаг')
}
});
Шаги могут создаваться динамически в зависимости от состояния страницы. Например, можно показывать шаг только если определённый элемент существует:
if (document.querySelector('#optionalFeature')) {
tour.addStep({
id: 'conditional-step',
text: 'Эта подсказка появляется только при наличии элемента',
attachTo: { element: '#optionalFeature', on: 'right' }
});
}
Также можно изменять текст или кнопки на лету через методы
updateStepOptions или напрямую через свойства шага.
Shepherd.js корректно работает с модальными окнами и формами. Для этого важно, чтобы шаг был привязан к реально существующему элементу на момент отображения:
tour.addStep({
id: 'modal-step',
text: 'Подсказка в модальном окне',
attachTo: { element: '.modal-input', on: 'bottom' },
beforeShowPromise: () => {
return new Promise(resolve => {
document.querySelector('.modal').style.display = 'block';
resolve();
});
}
});
Для мультиязычных приложений текст шагов можно хранить в объектах локализации:
const i18n = {
ru: {
step1: 'Нажмите на кнопку',
step2: 'Введите данные'
},
en: {
step1: 'Click the button',
step2: 'Enter your data'
}
};
tour.addStep({
id: 'localized-step',
text: i18n.ru.step1,
attachTo: { element: '#btn', on: 'top' }
});
Shepherd.js поддерживает CSS-анимации для шагов и стрелок, что повышает визуальную привлекательность. Для этого используются классы анимации, заданные в CSS, и темы библиотеки.
Для больших интерфейсов с множеством шагов рекомендуется:
beforeShowPromise
и when.show.Shepherd.js легко интегрируется с фреймворками типа React, Vue или
Angular через привязку к DOM-элементам. В React часто используют хуки
для контроля старта и завершения тура, а в Vue — v-if для
динамической генерации элементов, к которым привязываются шаги.
Широкий функционал Shepherd.js делает его универсальным инструментом для построения интерактивных туториалов, позволяя создавать пошаговые гайды, адаптивные подсказки и комплексные onboarding-сценарии с полной кастомизацией интерфейса и логики.