Shepherd.js — это библиотека для создания интерактивных пользовательских инструкций и пошаговых туров в веб-приложениях. Основная задача — управлять последовательностью подсказок, их позиционированием и поведением при взаимодействии с пользователем. Shepherd.js построен поверх Popper.js, что позволяет точно позиционировать подсказки относительно элементов DOM.
Ключевые объекты:
Создание нового тура начинается с инициализации объекта
Shepherd.Tour:
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: {
enabled: true
},
scrollTo: { beh * avior: 'smooth', block: 'center' },
classes: 'shepherd-theme-arrows'
},
useModalOverlay: true
});
Пояснения:
defaultStepOptions задаёт общие параметры для всех
шагов, например, стили или скроллинг к элементу.useModalOverlay включает затемнение фона для
фокусировки на текущем шаге.Каждый шаг создаётся методом addStep:
tour.addStep({
id: 'intro',
text: 'Добро пожаловать в наш интерфейс!',
attachTo: {
element: '#start-button',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
},
{
text: 'Закрыть',
action: tour.cancel
}
]
});
Ключевые моменты:
id — уникальный идентификатор шага, полезен для
управления и тестирования.text — содержимое подсказки, поддерживаются HTML и
стили.attachTo — объект с указанием элемента и позиции
(top, bottom, left,
right) относительно него.buttons — массив объектов кнопок с привязкой к методам
тура (next, back, cancel).Основные методы:
tour.start() — запуск тура с первого шага.tour.next() — переход к следующему шагу.tour.back() — возврат к предыдущему шагу.tour.cancel() — завершение тура.tour.complete() — отметка тура как завершённого без
отмены.Shepherd.js автоматически отслеживает видимость и позицию элементов, но при динамических интерфейсах можно использовать события DOM для обновления шага:
window.addEventListener('resize', () => {
tour.currentStep.updateStepElement();
});
Shepherd.js поддерживает темы и кастомные CSS-классы. Например:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows custom-tour',
arrow: true
}
});
classes — добавляет собственные классы для
кастомизации.arrow — отображение стрелки, указывающей на
элемент.Для глобальной настройки стилей можно использовать CSS:
.shepherd-theme-arrows.custom-tour .shepherd-header {
background-color: #1e90ff;
color: #fff;
}
.shepherd-theme-arrows.custom-tour .shepherd-button {
background-color: #f0f0f0;
border-radius: 4px;
}
При интеграционном тестировании важно проверить:
next,
back).attachTo и
обновление шага.next,
back, cancel и кастомные действия должны
корректно работать.Для тестирования можно использовать фреймворки типа Cypress или Playwright:
describe('Shepherd Tour Integration', () => {
it('Проверка первого шага тура', () => {
cy.visit('/app');
cy.window().then(win => {
win.tour.start();
});
cy.get('.shepherd-step').should('contain.text', 'Добро пожаловать');
cy.get('.shepherd-button').contains('Далее').click();
cy.get('.shepherd-step').should('contain.text', 'Следующий шаг');
});
});
Рекомендации по тестированию:
id шагов для удобной навигации
в тестах.Shepherd.js предоставляет события для расширенного контроля:
tour.on('start', () => console.log('Тур начался'));
tour.on('complete', () => console.log('Тур завершён'));
tour.on('show', step => console.log(`Показан шаг: ${step.id}`));
tour.on('cancel', () => console.log('Тур отменён'));
start — запуск тура.show — показ конкретного шага.complete и cancel — завершение или отмена
тура.Шаги можно добавлять динамически в зависимости от состояния приложения:
if (user.isAdmin) {
tour.addStep({
id: 'admin-step',
text: 'Административные функции доступны здесь.',
attachTo: { element: '#admin-panel', on: 'right' },
buttons: [{ text: 'Далее', action: tour.next }]
});
}
Такой подход позволяет адаптировать тур под разные роли пользователей и проверять логику во время интеграционных тестов.