Intro.js предоставляет мощный механизм управления поведением подсказок через события, что позволяет контролировать навигацию, кастомизировать интерфейс и обеспечивать интерактивность. События вызываются на разных этапах работы шагов и позволяют выполнять действия до или после их отображения, а также при попытках пользователя перейти к следующему шагу или завершить тур.
Ключевые события можно разделить на следующие категории:
onbeforechange, onchange,
oncomplete, onexit.onafterchange,
onbeforeexit.onbeforechange, onchange.Каждое событие принимает функцию обратного вызова, которой передается объект текущего шага и индекс шага. Это позволяет динамически изменять содержимое подсказки, блокировать переход или запускать сторонний код.
onbeforechangeСобытие onbeforechange срабатывает перед
отображением нового шага. Его можно использовать для:
Пример использования:
introJs().onbeforechange(function(targetElement) {
if(targetElement.id === "step3" && !userHasCompletedStep2()) {
alert("Сначала завершите предыдущий шаг!");
return false; // блокирует переход на следующий шаг
}
});
В данном примере проверяется выполнение предыдущего шага и при нарушении условия переход блокируется.
onchangeСрабатывает после того, как шаг стал активным. Используется для:
Пример:
introJs().onchange(function(targetElement) {
console.log("Текущий шаг: " + targetElement.id);
highlightElement(targetElement);
});
Это событие часто применяется для визуальных подсказок, таких как подсветка элемента или запуск подсказки, зависящей от состояния DOM.
onafterchangeПодобно onchange, но чаще используется для
инициализации сторонних библиотек после полной загрузки
подсказки на элементе. Полезно при работе с динамическими компонентами,
которые должны быть видимы перед манипуляциями.
Пример:
introJs().onafterchange(function(targetElement) {
if(targetElement.classList.contains('chart-step')) {
renderChart(targetElement);
}
});
oncompleteСрабатывает при завершении тура всеми шагами. Позволяет:
Пример:
introJs().oncomplete(function() {
saveTourProgress();
showCompletionMessage();
});
onexitВызывается при выходе из тура пользователем
(например, по кнопке закрытия). Отличается от oncomplete
тем, что не обязательно означает прохождение всех шагов. Используется
для:
Пример:
introJs().onexit(function() {
console.log("Пользователь покинул тур досрочно");
resetHighlighting();
});
onbeforeexitПозволяет перехватывать попытку выхода из тура и блокировать его при необходимости. Применимо для обязательного завершения интерактивного обучения.
Пример:
introJs().onbeforeexit(function() {
if(!userConfirmedExit()) {
alert("Вы уверены, что хотите выйти?");
return false; // отменяет выход
}
});
События позволяют создавать условные и интерактивные туры. Например, можно изменять шаги на лету:
const tour = introJs();
tour.setOptions({
steps: [
{ element: '#step1', intro: 'Первый шаг' },
{ element: '#step2', intro: 'Второй шаг' }
]
});
tour.onbeforechange(function(targetElement) {
if(targetElement.id === "step2" && !userAgreed()) {
this.addStep({ element: '#agreement', intro: 'Сначала примите соглашение' });
}
});
tour.start();
В этом примере новый шаг вставляется динамически, если пользователь не согласился с условиями.
Важно учитывать, что события могут влиять на навигацию:
false в onbeforechange или
onbeforeexit блокирует действие.onbeforechange для валидации и
блокировки переходов.onchange и onafterchange для
визуальных эффектов и инициализации компонентов.onexit и oncomplete — для
финальных действий и логирования.setOptions и методами
nextStep(), previousStep(), чтобы создавать
гибкие интерактивные туры.Эти возможности позволяют строить сложные и интерактивные обучающие сценарии, полностью контролируя поведение подсказок и реакцию на действия пользователя.