Библиотека Intro.js предоставляет удобный API для создания интерактивных пошаговых инструкций на веб-страницах. Один из ключевых аспектов управления пошаговыми турами — это получение информации о текущем шаге. Эта информация позволяет динамически изменять поведение тура, адаптировать содержимое подсказок или отслеживать прогресс пользователя.
Основной способ узнать текущий шаг — использовать метод
currentStep() у экземпляра тура. Экземпляр создаётся через
introJs():
const tour = introJs();
// Запуск тура
tour.start();
// Получение текущего шага
let stepIndex = tour.currentStep();
console.log(stepIndex); // выводит индекс текущего шага, начиная с 0
Особенности метода currentStep():
0 по умолчанию, так
как первый шаг считается активным при старте.Для более детальной информации о текущем шаге используется метод
getStep() в сочетании с объектом
introJs()._options.steps. Пример:
const tour = introJs();
tour.setOptions({
steps: [
{ element: '#step1', intro: 'Первый шаг' },
{ element: '#step2', intro: 'Второй шаг' },
{ element: '#step3', intro: 'Третий шаг' }
]
});
tour.start();
let currentStepIndex = tour.currentStep();
let stepData = tour._options.steps[currentStepIndex];
console.log(stepData.element); // DOM-элемент текущего шага
console.log(stepData.intro); // текст подсказки текущего шага
Важно: использование _options — это
обращение к внутренним данным библиотеки. Хотя оно работает, в будущих
версиях API может измениться. Для стабильного кода рекомендуется
использовать события и колбэки.
Intro.js предоставляет несколько событий, которые позволяют получать актуальные данные при переходе между шагами:
onchange(callback) — срабатывает при смене шага.onbeforechange(callback) — вызывается перед сменой
шага.onafterchange(callback) — вызывается после отображения
нового шага.Пример получения информации через onchange:
const tour = introJs();
tour.setOptions({
steps: [
{ element: '#step1', intro: 'Первый шаг' },
{ element: '#step2', intro: 'Второй шаг' },
{ element: '#step3', intro: 'Третий шаг' }
]
});
tour.onchange(function(targetElement) {
const stepIndex = tour.currentStep();
const stepData = tour._options.steps[stepIndex];
console.log('Текущий шаг:', stepIndex);
console.log('Элемент шага:', targetElement);
console.log('Описание шага:', stepData.intro);
});
tour.start();
В этом примере:
targetElement — DOM-элемент, на который ссылается
текущий шаг.stepData позволяет получить текст подсказки,
дополнительные опции и кастомные свойства, если они заданы в шаге.Информация о текущем шаге используется в нескольких сценариях:
tour.onbeforechange(function(targetElement) {
const stepIndex = tour.currentStep();
tour._options.steps[stepIndex].intro = `Шаг ${stepIndex + 1}: обновлённый текст`;
});
tour.onbeforechange(function() {
if (tour.currentStep() === 1) {
tour.next(); // автоматически переходит к следующему шагу
}
});
tour.onchange(function() {
const stepIndex = tour.currentStep();
console.log('Пользователь на шаге:', stepIndex);
// Отправка данных на сервер
});
currentStep() — основной способ узнать индекс
текущего шага.tour._options.steps[currentStepIndex].onbeforechange, onchange и
onafterchange позволяют динамически реагировать на
изменение шага._options полезен для
кастомизации, но следует помнить о потенциальной нестабильности
внутреннего API.Такой подход позволяет создавать гибкие, адаптивные интерактивные туры, где поведение каждого шага может зависеть от контекста и действий пользователя.