Shepherd.js предоставляет встроенные возможности для отслеживания и логирования событий, происходящих в процессе проведения интерактивных туров. Каждый тур и каждый шаг сопровождаются рядом событий, которые можно использовать для анализа поведения пользователя, отладки или интеграции с внешними системами аналитики.
Логирование событий строится вокруг подписки на
события через методы on, once и
off. Эти методы позволяют регистрировать обработчики,
которые срабатывают при возникновении определённых событий.
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true
}
});
// Подписка на событие начала тура
tour.on('start', () => {
console.log('Тур начался');
});
// Подписка на событие окончания тура
tour.on('complete', () => {
console.log('Тур завершён');
});
// Подписка на завершение конкретного шага
tour.on('show', (event) => {
console.log(`Показан шаг: ${event.step.id}`);
});
Shepherd.js предоставляет множество событий, которые можно использовать для детального логирования:
event.step).Каждое событие передаёт объект с контекстной информацией, что позволяет детально отслеживать действия пользователя и состояние тура.
tour.on('cancel', () => {
console.warn('Пользователь отменил тур');
});
tour.on('error', (error) => {
console.error('Произошла ошибка в туре:', error);
});
Для каждого шага можно регистрировать события, связанные с действиями пользователя, такими как нажатие кнопок, закрытие подсказок или перемещение между шагами.
tour.addStep({
id: 'step-1',
text: 'Это первый шаг',
buttons: [
{
text: 'Далее',
action: tour.next
}
],
when: {
show: () => console.log('Показан первый шаг'),
hide: () => console.log('Скрыт первый шаг')
}
});
Ключевое отличие when от глобальных событий туров
заключается в локализации обработчиков конкретно для данного
шага. Это позволяет вести более детальный лог по каждому
элементу интерфейса.
События Shepherd.js легко интегрируются с системами аналитики, такими как Google Analytics или внутренние трекеры. Для этого достаточно вызывать соответствующие функции внутри обработчиков событий:
tour.on('show', (event) => {
analytics.track('shepherd_step_shown', {
stepId: event.step.id,
stepTitle: event.step.options.title || ''
});
});
tour.on('complete', () => {
analytics.track('shepherd_tour_completed', { tourId: tour.options.id });
});
Для крупных приложений рекомендуется реализовать многоуровневое логирование:
info – общая информация о ходе тура.warn – события, которые могут указывать на
потенциальные проблемы.error – критические ошибки, влияющие на работу
тура.Применение фильтров по уровням позволяет контролировать объём логов и сосредоточиться на критичных событиях без перегрузки консоли или системы аналитики.
function logEvent(level, message, data = {}) {
if (level === 'error') console.error(message, data);
else if (level === 'warn') console.warn(message, data);
else console.log(message, data);
}
tour.on('error', (err) => logEvent('error', 'Ошибка в туре', err));
tour.on('show', (event) => logEvent('info', 'Показан шаг', { stepId: event.step.id }));
В сложных интерфейсах количество шагов может меняться в зависимости от действий пользователя. Shepherd.js поддерживает динамическое создание и логирование шагов, что позволяет фиксировать события даже для шагов, созданных на лету:
const dynamicStep = tour.addStep({
id: `step-${Date.now()}`,
text: 'Динамический шаг',
when: {
show: (event) => console.log(`Показан динамический шаг: ${event.step.id}`)
}
});
tour.show(dynamicStep.id);
Shepherd.js предоставляет методы off и
once, которые позволяют контролировать жизненный цикл
логирования:
once – подписка на событие с однократным
срабатыванием.off – удаление обработчика для предотвращения утечек
памяти или избыточного логирования.function onTourStart() {
console.log('Тур начат один раз');
}
tour.once('start', onTourStart);
// Удаление обработчика
tour.off('show', someHandlerFunction);
Такой подход помогает управлять ресурсами и сохраняет читаемость логов при множественных турах или пересоздаваемых шагах.
when для шагов с уникальными действиями.stepId,
event, timestamp).info,
warn, error) для разграничения критичных и
вспомогательных событий.Логирование в Shepherd.js обеспечивает гибкую систему контроля над поведением туров и предоставляет мощный инструмент для отладки, анализа и адаптации пользовательских интерфейсов.