Для программного создания шагов в Intro.js
используется метод setOptions или объект конфигурации при
вызове start(). Каждый шаг описывается объектом с ключевыми
параметрами:
const intro = introJs();
intro.setOptions({
steps: [
{
element: '#first-element',
intro: 'Это первый шаг интерактивного руководства.',
position: 'bottom'
},
{
element: '#second-element',
intro: 'Второй шаг с дополнительной информацией.',
position: 'right'
}
],
showBullets: true,
showStepNumbers: true
});
intro.start();
Ключевые свойства шагов:
element — CSS-селектор или DOM-элемент, к которому
привязывается подсказка. Если параметр не задан, шаг отображается в
центре экрана.intro — текст подсказки.position — положение подсказки относительно элемента
(top, right, bottom,
left, auto).tooltipClass — дополнительный CSS-класс для оформления
конкретного шага.disableInteraction — если true, элемент не
кликабельный во время показа шага.Шаги можно создавать программно без статической конфигурации,
используя метод addStep:
intro.addStep({
element: document.querySelector('#dynamic-step'),
intro: 'Этот шаг был добавлен динамически',
position: 'left'
});
intro.start();
Метод addStep полезен для случаев, когда шаги зависят от
состояния страницы или пользовательских действий.
Порядок шагов в Intro.js определяется массивом
steps, но его можно менять динамически с помощью событий и
методов API:
intro.onbeforechange(function(targetElement) {
if (targetElement.id === 'conditional-step') {
intro.nextStep(); // пропуск шагов по условию
}
});
Также возможно создавать условные шаги, основываясь на состоянии интерфейса:
const steps = [
{ element: '#step1', intro: 'Шаг 1', position: 'bottom' }
];
if (userLoggedIn) {
steps.push({ element: '#step2', intro: 'Шаг только для авторизованных', position: 'right' });
}
intro.setOptions({ steps });
intro.start();
Intro.js позволяет управлять навигацией шагов через API:
nextStep() — перейти к следующему шагу.previousStep() — перейти к предыдущему.goToStep(stepNumber) — перейти к конкретному шагу
(номер шага начинается с 1).exit() — завершить руководство.Пример с программным управлением:
intro.onafterchange(function(targetElement) {
if (targetElement.id === 'special-step') {
// Автоматический переход через 2 секунды
setTimeout(() => intro.nextStep(), 2000);
}
});
Содержание подсказки можно изменять динамически с помощью метода
setOptions в процессе показа:
intro.onbeforechange(function(targetElement) {
if (targetElement.id === 'update-text') {
intro.setOptions({
steps: [
{
element: '#update-text',
intro: 'Текст обновлён динамически',
position: 'top'
}
]
});
}
});
Каждый шаг можно индивидуально оформлять:
tooltipClass — добавляет CSS-класс к конкретной
подсказке.setOptions({ tooltipClass: 'custom-tooltip' }).highlightClass для подсветки
элемента.Пример:
intro.setOptions({
steps: [
{
element: '#highlighted',
intro: 'Подсвеченный элемент',
position: 'right',
highlightClass: 'custom-highlight',
tooltipClass: 'custom-tooltip'
}
]
});
Intro.js поддерживает следующие события:
onbeforechange(targetElement) — перед отображением
нового шага.onafterchange(targetElement) — после отображения
шага.oncomplete() — после завершения всех шагов.onexit() — при досрочном завершении.Эти события позволяют реализовать сложную логику, например, условные шаги, асинхронную подгрузку данных и автоматический переход между шагами.
Для сложных интерфейсов с динамическими элементами часто используется стратегия:
setOptions.onbeforechange и
onafterchange для адаптивной логики.document.addEventListener('DOMContentLoaded', () => {
const steps = Array.from(document.querySelectorAll('.feature')).map((el, index) => ({
element: el,
intro: `Функция ${index + 1}`,
position: 'bottom'
}));
const intro = introJs();
intro.setOptions({ steps });
intro.start();
});
Такой подход обеспечивает полную гибкость в создании шагов и их последовательности.