Метод off в Shepherd.js предназначен
для удаления ранее зарегистрированных обработчиков событий у экземпляров
тура или отдельных шагов. Он является критически важным инструментом для
управления поведением интерактивных туров, особенно в динамических
интерфейсах, где события могут повторно регистрироваться при обновлении
DOM или повторных инициализациях шагов.
tour.off(event, handler);
step.off(event, handler);
event — строка с именем события, от которого требуется
отписаться.handler — функция-обработчик, которую нужно удалить.
Если параметр не передан, удаляются все обработчики для
указанного события.Shepherd.js поддерживает широкий набор событий, к которым можно привязать обработчики:
show — шаг отображается на экране.hide — шаг скрывается.complete — шаг завершен пользователем.cancel — тур был отменен.start — тур запущен.destroy — шаг или тур уничтожен.active — шаг стал активным.Пример регистрации обработчика:
function onStepShow() {
console.log("Шаг отображен");
}
step.on("show", onStepShow);
Для удаления:
step.off("show", onStepShow);
Если требуется удалить все обработчики определенного
события, можно вызвать off без второго
аргумента:
step.off("show");
В этом случае все функции, привязанные к событию
show на данном шаге, будут удалены.
Для удаления всех обработчиков всех событий:
step.off();
tour.off();
Такое использование удобно при динамическом создании и удалении шагов, чтобы исключить утечки памяти и повторное срабатывание старых обработчиков.
on и
onceМетод on используется для постоянной подписки на
событие, а once — для одноразового вызова. Важно понимать,
что off может удалить только те обработчики,
которые были явно зарегистрированы через on или
once:
const handler = () => console.log("Одноразовое событие");
step.once("show", handler);
// Удаление до срабатывания
step.off("show", handler);
Если handler не указан, Shepherd удаляет все
обработчики, включая одноразовые.
Метод off работает не только со шагами,
но и с туром целиком, позволяя централизованно
управлять событиями:
function onTourStart() {
console.log("Тур начался");
}
tour.on("start", onTourStart);
// Отписка
tour.off("start", onTourStart);
Удаление обработчиков на уровне тура особенно полезно при создании динамических туров, которые могут запускаться несколько раз в рамках одного приложения.
Сохранять ссылки на функции-обработчики — для корректной отписки необходимо передавать ту же функцию, что использовалась при регистрации. Анонимные функции удалить невозможно.
Использовать off перед уничтожением
шагов — предотвращает утечки памяти и ошибки при повторной
инициализации шагов.
Отписка всех обработчиков при переинициализации
— если шаги или туры создаются заново, важно удалять старые подписки
через off без аргументов.
Комбинировать с once — можно
использовать одноразовые события для коротких туров и дополнительно
отписывать обработчики через off при необходимости
досрочной остановки.
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: { enabled: true },
scrollTo: { beh * avior: 'smooth', block: 'center' }
}
});
const step1 = {
id: 'step1',
text: 'Приветствие!',
attachTo: { element: '.intro', on: 'bottom' }
};
tour.addStep(step1);
function onStepShow() {
console.log('Шаг показан');
}
// Подписка на событие
tour.getCurrentStep().on('show', onStepShow);
// Позднее отписка
tour.getCurrentStep().off('show', onStepShow);
// Отписка всех обработчиков
tour.getCurrentStep().off();
Этот пример демонстрирует полное управление событиями: подписка, индивидуальная отписка и удаление всех обработчиков для шага.
Метод off обеспечивает гибкое управление событиями,
предотвращает накопление лишних подписок и позволяет создавать
динамические, отзывчивые интерактивные туры с минимальными побочными
эффектами.