Библиотека Intro.js предоставляет мощный инструмент для создания интерактивных пошаговых инструкций на веб-страницах. Одним из ключевых аспектов управления последовательностью шагов является обработка событий, связанных с изменением текущего шага. Эти события позволяют программно реагировать на переходы между шагами, выполнять кастомные действия и контролировать логику навигации.
onbeforechange и onchangeonbeforechange(targetElement)
вызывается перед тем, как текущий шаг изменится на
следующий. Параметр targetElement указывает на
DOM-элемент нового шага. Основные особенности:
false
из функции обработчика.Пример:
introJs().onbeforechange(function(targetElement) {
if (targetElement.id === 'restricted-step') {
alert('Этот шаг временно недоступен');
return false; // отменяет переход
}
});
onchange(targetElement) срабатывает
после того, как шаг изменился. Параметр
targetElement соответствует текущему шагу. Применяется
для:
Пример:
introJs().onchange(function(targetElement) {
console.log('Текущий шаг:', targetElement.id);
if (targetElement.dataset.highlight === 'true') {
targetElement.classList.add('highlighted');
}
});
onbeforeexit и onexitonbeforeexit() вызывается перед
завершением интерактивного тура, когда пользователь нажимает
“Закрыть” или завершает все шаги. Позволяет:
introJs().onbeforeexit(function() {
return confirm('Вы уверены, что хотите завершить тур?');
});
onexit() выполняется после завершения
тура. Используется для:
introJs().onexit(function() {
console.log('Тур завершен');
document.querySelectorAll('.highlighted').forEach(el => el.classList.remove('highlighted'));
});
onbeforechange + кастомизацияIntro.js позволяет управлять переходом по кнопкам “Next” и “Back”, используя комбинацию событий. Например:
introJs().onbeforechange(function(targetElement) {
if (targetElement.dataset.skipStep === 'true') {
this.next(); // автоматически пропускает шаг
}
});
Особенности:
Intro.js предоставляет методы и свойства для работы с текущим шагом:
this._currentStep – индекс текущего шага (нумерация с
0).this._introItems[this._currentStep] – объект шага,
включая element, intro,
position.Пример обновления текста шага:
introJs().onchange(function(targetElement) {
const currentStep = this._currentStep;
this._introItems[currentStep].intro = 'Обновленный текст для текущего шага';
});
События Intro.js поддерживают асинхронные действия. Например, можно загрузить данные перед отображением шага:
introJs().onbeforechange(async function(targetElement) {
if (targetElement.dataset.loadData === 'true') {
await fetchDataForStep(targetElement.id);
}
});
Особенности использования:
onbeforechange можно использовать с
async/await.Если элементы, указанные в шагах, появляются динамически после инициализации Intro.js, нужно:
introJs().addStep({
element: '#dynamic-element',
intro: 'Динамически добавленный шаг'
});
onbeforechange для
проверки существования элемента:introJs().onbeforechange(function(targetElement) {
if (!document.body.contains(targetElement)) {
this.next(); // пропускаем шаг
}
});
Это позволяет избежать ошибок и гарантирует плавный переход между шагами, даже если DOM-структура изменяется во время тура.
onchange и onbeforechange, чтобы не замедлять
интерфейс.return false в onbeforechange для контроля
логики тура.Эти механизмы позволяют строить сложные, интерактивные туры, полностью контролируя переходы и визуальные эффекты на каждом шаге. Управление событиями изменения шага является ядром гибкой настройки Intro.js и обеспечивает интеграцию с любой динамикой интерфейса.