Shepherd.js предоставляет мощный инструмент для создания интерактивных туров по интерфейсу. Ключевую роль в этом процессе играет Builder, который позволяет конфигурировать шаги тура и их поведение с высокой гибкостью.
Для начала требуется создать экземпляр Shepherd Tour:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true
}
});
Здесь defaultStepOptions задаёт базовые
параметры, которые будут применяться ко всем шагам, если не
указано иное. Это упрощает конфигурацию и уменьшает дублирование
кода.
Каждый шаг создаётся с помощью метода addStep,
принимающего имя шага и объект конфигурации:
tour.addStep('intro', {
text: 'Добро пожаловать в наш интерфейс!',
attachTo: { element: '#start-button', on: 'bottom' },
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
Ключевые параметры шагов:
text — основной текст шага.attachTo — объект с указанием DOM-элемента
(element) и позиции подсказки (on).buttons — массив кнопок с действиями
(action), такими как next, back,
cancel.Builder позволяет модифицировать шаги после их создания и динамически управлять поведением тура.
tour.getById('intro').updateStepOptions({
classes: 'custom-step-style'
});
tour.getById('intro').updateStepOptions({
text: 'Новый текст шага после события'
});
tour.on('show', function() {
console.log('Шаг отображен');
});
tour.on('complete', function() {
console.log('Тур завершен');
});
Эти возможности делают Builder гибким инструментом для динамического управления шагами, включая условное отображение или модификацию контента в зависимости от действий пользователя.
Переходы между шагами можно контролировать через свойства кнопок и события:
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Пропустить',
action: tour.cancel
},
{
text: 'Далее',
action: function() {
if (условие) {
tour.next();
} else {
tour.show('special-step');
}
}
}
]
Это позволяет строить ветвящиеся туры, где последовательность шагов зависит от пользовательского ввода или состояния интерфейса.
Builder поддерживает добавление любой кастомной логики внутри шагов. Например, можно добавить обработчик клика на внешний элемент:
tour.addStep('custom', {
text: 'Нажмите на кнопку, чтобы продолжить',
attachTo: { element: '#action-button', on: 'top' },
buttons: [],
when: {
show: function() {
document.querySelector('#action-button').addEventListener('click', tour.next);
}
}
});
Свойство when позволяет привязывать функции к событиям
show, hide, complete, обеспечивая
полный контроль над жизненным циклом шага.
Вместо статического добавления шагов можно использовать циклы или функции, чтобы строить шаги на лету:
const stepsData = [
{ text: 'Шаг 1', element: '#step1' },
{ text: 'Шаг 2', element: '#step2' },
{ text: 'Шаг 3', element: '#step3' }
];
stepsData.forEach((data, index) => {
tour.addStep(`step-${index + 1}`, {
text: data.text,
attachTo: { element: data.element, on: 'bottom' },
buttons: [
{ text: 'Далее', action: tour.next },
{ text: 'Назад', action: tour.back }
]
});
});
Такой подход делает Builder масштабируемым, позволяет быстро генерировать туры даже для сложных интерфейсов с большим количеством элементов.
start() — запускает тур.next() — переходит к следующему шагу.back() — возвращает к предыдущему шагу.cancel() — завершает тур досрочно.complete() — завершает тур корректно.getById(id) — возвращает объект шага для динамических
изменений.Эти методы создают основу для программного контроля тура, позволяя интегрировать Shepherd.js в сложные бизнес-логики интерфейса.
Builder позволяет комбинировать стандартные шаги с любым кодом интерфейса: показ модальных окон, переключение вкладок, анимации элементов. Это делает библиотеку идеальной для комплексных интерактивных инструкций, обучающих пользователей работе с приложением.
Шаги могут адаптироваться к состоянию интерфейса, что позволяет создавать интеллектуальные туры, реагирующие на данные пользователя и динамически изменяющиеся элементы страницы.