Для начала работы с Shepherd.js необходимо подключить саму библиотеку и её зависимости. В современном JavaScript-проекте это делается через npm или yarn:
npm install shepherd.js
или
yarn add shepherd.js
После установки импортируется основной класс и стили:
import Shepherd from 'shepherd.js';
import 'shepherd.js/dist/css/shepherd.css';
Shepherd.js использует Popper.js для позиционирования подсказок, поэтому убедитесь, что зависимости установлены автоматически через пакет. Для управления стилями рекомендуется кастомизировать CSS через собственные классы или использовать встроенные темы.
Основная единица работы — это тур
(Shepherd.Tour). Тур состоит из последовательности шагов
(step), каждый из которых содержит информацию о контенте,
привязке к элементу DOM и поведении.
Пример создания базового тура:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true
}
});
tour.addStep({
id: 'intro',
text: 'Добро пожаловать в наше приложение.',
attachTo: {
element: '.header-logo',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
tour.addStep({
id: 'menu',
text: 'Здесь находится главное меню.',
attachTo: {
element: '.main-menu',
on: 'right'
},
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Закончить',
action: tour.complete
}
]
});
tour.start();
Ключевые моменты:
id шага должен быть уникальным.attachTo задаёт DOM-элемент и позицию подсказки
относительно него.buttons управляют навигацией по туру.Для проверки адаптивности рекомендуется использовать инструменты браузера (DevTools) с эмуляцией мобильных устройств. Shepherd.js автоматически позиционирует подсказки относительно указанных элементов, но на малых экранах могут возникать сбои в видимости или перекрытия.
Примеры проблем:
scrollTo: true.Для корректного тестирования следует:
На мобильных устройствах с сенсорным вводом важно учитывать:
preventScroll может влиять на поведение
скролла.click заменяются на touchstart
автоматически, но иногда требуется ручная обработка.Рекомендуется комбинировать responsive CSS и проверку на физическом устройстве, так как эмуляторы не всегда воспроизводят поведение жестов.
Если элементы DOM загружаются динамически, шаги нужно создавать
после появления элементов. Shepherd.js предоставляет
метод when() для отслеживания событий тура:
tour.addStep({
id: 'dynamic-step',
text: 'Это динамически созданный элемент.',
attachTo: {
element: '#dynamic-element',
on: 'top'
},
buttons: [
{ text: 'Далее', action: tour.next }
]
});
document.addEventListener('DOMContentLoaded', () => {
const dynamicElement = document.createElement('div');
dynamicElement.id = 'dynamic-element';
document.body.appendChild(dynamicElement);
});
Проверка на устройствах: обязательно убедиться, что шаг появляется корректно даже при асинхронной подгрузке контента.
Shepherd.js поддерживает события на уровне тура и шагов. Для тестирования удобно отслеживать:
tour.on('start', () => console.log('Тур запущен'));
tour.on('complete', () => console.log('Тур завершён'));
tour.on('cancel', () => console.log('Тур отменён'));
События помогают:
attachTo.on поддерживает значения: top,
bottom, left, right, а также
auto — Shepherd выбирает оптимальное положение.modalOverlay: true, чтобы фокусировать пользователя на
подсказке и избегать перекрытий.popperOptions для точной настройки поведения:const tour = new Shepherd.Tour({
defaultStepOptions: {
popperOptions: {
modifiers: [{ name: 'preventOverflow', options: { padding: 10 } }]
}
}
});
show и hide для
логирования проблемных шагов.scrollTo и popperOptions для
корректного позиционирования на небольших экранах.Shepherd.js предоставляет гибкий API для создания интерактивных туров, но именно тестирование на реальных устройствах позволяет выявить тонкие проблемы адаптивности, корректного позиционирования и взаимодействия с динамическим контентом. Правильная настройка шагов, кнопок и событий обеспечивает стабильное поведение интерфейса на любых экранах.