В библиотеке Intro.js событие перед началом тура позволяет разработчику управлять процессом инициализации интерактивного руководства до его фактического запуска. Это критически важно, когда требуется динамически менять содержимое шагов, проверять условия запуска или выполнять любые подготовительные действия.
beforeChangeВ Intro.js существует глобальное событие
beforeChange, которое вызывается перед
переходом к следующему шагу, но для запуска тура также предусмотрено
событие onbeforestart. Именно оно
используется для выполнения логики перед началом тура:
var intro = introJs();
intro.onbeforestart(function() {
console.log("Тур собирается начаться");
// Выполнение дополнительных действий
});
Ключевые особенности onbeforestart:
false.intro, позволяя модифицировать
шаги перед их рендерингом.Часто необходимо изменять шаги динамически, основываясь на состоянии страницы или действиях пользователя. Использование события перед стартом позволяет это сделать:
var intro = introJs();
intro.setOptions({
steps: [
{ element: '#step1', intro: 'Первый шаг' },
{ element: '#step2', intro: 'Второй шаг' }
]
});
intro.onbeforestart(function() {
// Динамическая модификация шагов
if (document.querySelector('#step3')) {
intro.addStep({
element: '#step3',
intro: 'Дополнительный шаг'
});
}
});
intro.start();
В этом примере третий шаг добавляется только если соответствующий элемент присутствует на странице. Это особенно удобно для SPA-приложений, где структура DOM может изменяться динамически.
Функция onbeforestart может возвращать
false, чтобы предотвратить старт интерактивного тура:
intro.onbeforestart(function() {
if (!userHasPermission()) {
console.log("Пользователь не имеет доступа к туру");
return false;
}
});
В этом случае метод intro.start() вызовет событие, но
тур не начнется, если условие не выполнено. Это позволяет строить
сложную логику доступа к обучающим инструкциям.
Для случаев, когда необходимо выполнить асинхронную
подготовку перед началом тура (например, загрузку данных или
элементов DOM), можно использовать промисы или колбэки внутри
onbeforestart:
intro.onbeforestart(async function() {
await fetchDataForTour();
intro.setOptions({
steps: generateStepsFromData()
});
});
intro.start();
Такой подход гарантирует, что тур начнется только после полной подготовки всех данных и элементов.
Использование события перед стартом особенно полезно при:
onbeforestart
вызываются последовательно, но важно учитывать, что возвращение
false одним из обработчиков прервет старт для всех.onbeforestart
влияет только на текущий старт тура; повторный вызов
intro.start() потребует повторной настройки, если шаги были
динамически добавлены.Использование события перед началом тура предоставляет полный контроль над инициализацией интерактивного руководства, позволяет создавать адаптивные сценарии и интегрировать Intro.js в сложные веб-приложения с динамическим контентом.