В Intro.js каждый тур создается как отдельный экземпляр объекта. Управление жизненным циклом этого экземпляра играет ключевую роль для корректной работы интерфейса, особенно если необходимо запускать несколько туров на одной странице или динамически создавать и удалять шаги. Процесс уничтожения экземпляра тура позволяет освободить ресурсы, удалить слушатели событий и предотвратить возможные утечки памяти.
Прежде чем рассматривать уничтожение, важно понимать структуру экземпляра. Тур создается следующим образом:
const intro = introJs();
intro.setOptions({
steps: [
{ element: '#step1', intro: 'Первый шаг' },
{ element: '#step2', intro: 'Второй шаг' }
]
});
intro.start();
В этом примере intro — это объект тура, содержащий все
настройки, текущий шаг, привязки к DOM и внутренние слушатели
событий.
1. Метод exit()
Метод exit() завершает текущий тур и удаляет его
визуальные элементы. После вызова exit() экземпляр остаётся
в памяти, но все DOM-элементы тура исчезают, а слушатели событий
отключаются.
intro.exit();
Особенности:
onbeforechange или onafterchange, перестают
вызываться.start() с
теми же настройками.2. Полное уничтожение экземпляра
Для полной очистки и предотвращения утечек памяти рекомендуется после использования тура отменять ссылки на экземпляр:
intro.exit();
intro = null;
После этого сборщик мусора сможет освободить память, занятую объектом, если на него больше нет ссылок.
При создании нескольких туров на одной странице или генерации шагов динамически важно уничтожать предыдущий экземпляр перед созданием нового:
let currentTour;
function startNewTour(steps) {
if (currentTour) {
currentTour.exit();
currentTour = null;
}
currentTour = introJs();
currentTour.setOptions({ steps });
currentTour.start();
}
Преимущества подхода:
Intro.js предоставляет события, которые помогают корректно реагировать на завершение тура:
onexit(callback) — вызывается при вызове
exit().oncomplete(callback) — вызывается, когда тур завершен
пользователем.Пример:
intro.onexit(function() {
console.log('Тур завершен и элементы удалены');
});
intro.oncomplete(function() {
console.log('Тур пройден полностью');
});
Эти обработчики полезны для освобождения ресурсов, остановки анимаций или сброса интерфейсных состояний перед удалением экземпляра.
exit() следует очищать переменные, хранящие экземпляр,
чтобы предотвратить ошибочные вызовы методов.start() без
exit(): Запуск нового тура на том же экземпляре
без выхода может вызвать визуальные конфликты и дублирование подсветки
элементов.onexit и oncomplete помогают синхронизировать
уничтожение тура с логикой приложения.exit() — завершает тур, удаляет подсветку и отключает
события, но оставляет объект живым.null после exit()
гарантирует полное удаление объекта.onexit и oncomplete позволяют
интегрировать логику приложения с жизненным циклом тура.Эффективное управление экземплярами туров критично для сложных интерфейсов с множественными интерактивными путеводителями, особенно в одностраничных приложениях и веб-приложениях с динамическим контентом.