Shepherd.js предоставляет гибкий механизм для создания интерактивных руководств по пользовательскому интерфейсу. Основой любого такого руководства является тур (Tour), который состоит из множества шагов (Step). Управление порядком этих шагов позволяет создавать динамичные, адаптивные и интерактивные сценарии обучения пользователей.
Каждый шаг создается с помощью метода
tour.addStep(id, options), где id — уникальный
идентификатор шага, а options — объект с настройками шага.
Среди ключевых опций:
text — текст, отображаемый в тултипе.attachTo — привязка к элементу DOM.buttons — массив кнопок, каждая из которых может
вызывать next(), back(), или кастомную
функцию.advanceOn — событие, которое автоматически переводит на
следующий шаг.beforeShowPromise — функция или промис, выполняемый
перед отображением шага, полезен для динамического изменения
контента.Пример создания шага:
tour.addStep('intro', {
text: 'Это первый шаг тура',
attachTo: { element: '#header', on: 'bottom' },
buttons: [
{ text: 'Далее', action: tour.next }
]
});
Shepherd.js не использует фиксированное числовое индексирование для
шагов. Вместо этого порядок определяется последовательностью добавления
шагов и методами навигации (next(), back()).
Для изменения порядка шагов можно:
tour.addStep('step1', { text: 'Первый шаг' });
tour.addStep('step2', { text: 'Второй шаг' });
tour.addStep('step3', { text: 'Третий шаг' });
id:tour.addStep('step2', {
text: 'Второй шаг',
buttons: [
{ text: 'Пропустить к третьему', action: () => tour.show('step3') },
{ text: 'Назад', action: tour.back }
]
});
if(user.isAdmin) {
tour.addStep('adminStep', { text: 'Админские функции' });
}
Для сложных сценариев важно не только менять порядок, но и управлять тем, какие шаги будут отображены:
tour.removeStep('stepId') удаляет шаг из тура.beforeShowPromise позволяет динамически отменять или
изменять шаг:tour.addStep('stepConditional', {
text: 'Шаг только для определённых пользователей',
beforeShowPromise: () => {
if(!user.isLoggedIn) {
tour.next();
}
}
});
Shepherd.js предоставляет методы:
tour.show(id) — показать шаг с указанным
идентификатором.tour.next() — перейти к следующему шагу.tour.back() — перейти к предыдущему шагу.tour.complete() — завершить тур.Сочетание этих методов позволяет полностью контролировать поток тура. Например, можно создать нелинейный сценарий:
tour.addStep('step1', { text: 'Начало' });
tour.addStep('step2', { text: 'Выбор опции A или B', buttons: [
{ text: 'A', action: () => tour.show('stepA') },
{ text: 'B', action: () => tour.show('stepB') }
]});
tour.addStep('stepA', { text: 'Выбран A' });
tour.addStep('stepB', { text: 'Выбран B' });
id для всех шагов.buttons и
advanceOn.beforeShowPromise для динамических
условий.show, next,
back для точного контроля порядка.Такой подход позволяет создавать адаптивные туры, где порядок шагов может изменяться в зависимости от действий пользователя, состояния приложения или других условий.