В библиотеке Shepherd.js для создания интерактивных пошаговых
инструкций по интерфейсу веб-приложений ключевыми событиями являются
complete и
cancel. Несмотря на внешнюю схожесть — оба
события прерывают или завершают текущий тур — их семантика и последствия
для состояния приложения различны.
completeСобытие complete вызывается, когда тур
доходит до естественного завершения, то есть пользователь проходит все
шаги до конца. Оно сигнализирует о нормальном окончании
тура.
complete:Инициируется только при успешном прохождении всех шагов. Даже если тур закрыт вручную после последнего шага, событие будет считаться завершением.
Используется для выполнения действий после успешного завершения:
tutorialCompleted = true в localStorage или базе
данных).Пример использования:
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: {
enabled: true
},
classes: 'shepherd-theme-arrows',
scrollTo: { beh * avior: 'smooth', block: 'center' }
}
});
tour.addStep({
id: 'intro',
text: 'Добро пожаловать в тур!',
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
tour.on('complete', () => {
console.log('Тур пройден полностью');
localStorage.setItem('tutorialCompleted', 'true');
});
tour.start();
cancelСобытие cancel возникает, когда
пользователь прерывает тур до его естественного
завершения. Это может быть сделано через крестик, кнопку отмены
или вызов метода tour.cancel() программно.
cancel:Отличается от complete тем, что тур не
доходит до конца. Это прерывание считается неполным
прохождением, поэтому любые действия, завязанные на успешном
завершении, не должны выполняться.
Используется для обработки отказа пользователя:
Пример использования:
tour.on('cancel', () => {
console.log('Тур был прерван пользователем');
alert('Вы прервали тур. Чтобы пройти его позже, нажмите "Начать тур"');
});
| Характеристика | complete |
cancel |
|---|---|---|
| Причина вызова | Тур пройден до конца | Тур прерван до конца |
| Состояние пользователя | Успешное завершение | Неуспешное или прерванное завершение |
| Типичные действия | Сохранение прогресса, активация функций | Сообщение пользователю, очистка временных данных |
| Вызов через API | Завершение последнего шага, tour.complete() |
Вызов tour.cancel(), кнопка отмены |
complete и cancelМетоды tour.complete() и tour.cancel()
могут вызываться программно, и это напрямую влияет на генерацию
событий:
tour.complete() → генерирует событие
completetour.cancel() → генерирует событие
cancelПримечательно, что вызов tour.hide() или закрытие шага
вручную не инициирует ни одно из этих событий, если не завершён весь тур
или не вызван cancel().
// Программное завершение
if (условиеУспешногоПрохождения) {
tour.complete(); // вызовет complete
} else {
tour.cancel(); // вызовет cancel
}
complete должны отличаться от действий после
cancel. Не стоит использовать одно событие для обработки
обоих случаев.complete должен фиксировать факт полного прохождения
тура.cancel
полезны для изучения того, где пользователи теряют интерес или
сталкиваются с проблемами в интерфейсе.Этот подход позволяет создавать точное управление потоками интерактивного обучения, учитывая как успешное завершение, так и преждевременное прерывание тура, обеспечивая гибкость интерфейса и корректную работу аналитики.