Метод once в Shepherd.js предоставляет возможность
подписки на события, которые должны срабатывать только один раз за
жизненный цикл шага или тура. Это особенно полезно для обработки
событий, которые не должны повторяться при повторных активациях шага или
при навигации по туру.
oncestep.once(event, callback);
tour.once(event, callback);
event — строка, название события, на которое необходимо подписаться. Shepherd поддерживает множество событий, таких как:
show — срабатывает при показе шага;hide — срабатывает при скрытии шага;complete — срабатывает при завершении тура;cancel — срабатывает при отмене тура;active — срабатывает при активации шага.callback — функция, которая будет вызвана при возникновении события. После первого срабатывания подписка автоматически удаляется.
once от
onМетод on подписывает обработчик на событие, который
может срабатывать многократно:
step.on('show', () => {
console.log('Шаг показан');
});
В отличие от on, once гарантирует, что
обработчик будет вызван только один раз, независимо от
того, сколько раз событие происходит:
step.once('show', () => {
console.log('Это сообщение выведется только один раз');
});
Такое поведение предотвращает повторное выполнение логики, которая должна запускаться только при первой активации, например: начальная настройка интерфейса, запуск анимации, или запись статистики.
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true
}
});
tour.addStep({
id: 'intro',
text: 'Добро пожаловать в тур',
attachTo: { element: '.header', on: 'bottom' }
});
tour.steps[0].once('show', () => {
console.log('Шаг intro показан впервые');
});
tour.start();
В этом примере обработчик сработает только при первом показе шага
intro, и при повторном возврате к этому шагу
console.log уже не выполнится.
tour.once('complete', () => {
alert('Тур завершён впервые');
});
Такой подход особенно полезен для действий, которые должны выполняться только при первом завершении тура, например, запись информации в базу данных или отправка аналитики.
onceМетод once работает с теми же событиями, что и
on:
start, complete,
cancel, active, inactive,
show, hideshow, hide,
complete, cancel, active,
inactiveИспользование once на уровне тура позволяет отслеживать
одноразовые события для всего процесса, тогда как использование на
уровне шага ограничивает область действия конкретным шагом.
once не мешает существующим обработчикам, добавленным через
on.callback выполняются асинхронные операции, важно учитывать,
что они будут запущены только один раз, даже если шаг будет показан
повторно.once можно назначать после
добавления шага к туру, но до его показа.Метод once в Shepherd.js обеспечивает строгий контроль
над одноразовыми событиями, что повышает управляемость поведения тура и
шагов, упрощает обработку сложных сценариев и снижает риск повторного
вызова критичных функций.