Intro.js предоставляет несколько способов запуска интерактивных туров
на веб-странице. Методы инициализации позволяют гибко управлять
поведением тура, настраивать последовательность шагов и подключать
пользовательские события. Основной объект для работы —
introJs(), создающий экземпляр интерактивного тура.
const tour = introJs();
После создания экземпляра можно сразу задать конфигурацию и запустить
тур с помощью метода .start().
Самый простой способ — вызвать introJs() и сразу
запустить тур:
introJs().start();
При этом Intro.js автоматически ищет элементы с атрибутами
data-intro и data-step. Порядок шагов
определяется значением data-step. Если шаги не указаны,
библиотека обходит элементы в порядке появления в DOM.
Ключевые моменты:
data-intro — текст подсказки для шага.data-step — порядковый номер шага.data-step приводит к автоматической
сортировке элементов по DOM-порядку.Можно задавать шаги программно, что удобно для динамического контента:
const tour = introJs();
tour.setOptions({
steps: [
{
element: document.querySelector('#step1'),
intro: 'Это первый шаг'
},
{
element: document.querySelector('#step2'),
intro: 'Это второй шаг'
},
{
element: '#step3',
intro: 'Это третий шаг, с подсказкой без объекта'
}
]
}).start();
Особенности:
element и
intro.position
(top, bottom, left,
right, auto) для точного позиционирования
подсказки.Intro.js позволяет задавать настройки, влияющие на все шаги:
introJs().setOptions({
showStepNumbers: false,
exitOnOverlayClick: false,
nextLabel: 'Вперед',
prevLabel: 'Назад',
doneLabel: 'Готово',
tooltipClass: 'custom-tooltip',
highlightClass: 'custom-highlight'
}).start();
Основные опции:
showStepNumbers — показывать номера шагов.exitOnOverlayClick — закрывать тур при клике на
затемнённый фон.nextLabel, prevLabel,
doneLabel — текст кнопок управления.tooltipClass, highlightClass — возможность
применять кастомные CSS-классы.Когда элементы появляются на странице после загрузки (например, через AJAX), необходимо создавать тур после их добавления:
function startDynamicTour() {
const tour = introJs();
tour.setOptions({
steps: [
{ element: '#dynamic1', intro: 'Динамический элемент 1' },
{ element: '#dynamic2', intro: 'Динамический элемент 2' }
]
}).start();
}
// вызов после загрузки динамического контента
loadDynamicContent().then(() => startDynamicTour());
Преимущества метода:
Intro.js поддерживает цепочку событий, которые можно привязывать до запуска тура:
const tour = introJs();
tour.onbeforechange((targetElement) => {
console.log('Перед переходом к шагу', targetElement);
});
tour.onchange((targetElement) => {
console.log('Сейчас показываем шаг', targetElement);
});
tour.oncomplete(() => {
console.log('Тур завершен');
});
tour.onexit(() => {
console.log('Тур прерван пользователем');
});
tour.start();
События:
onbeforechange — вызывается перед отображением
следующего шага.onchange — после отображения шага.oncomplete — после завершения всего тура.onexit — при досрочном выходе.Эти события позволяют динамически менять контент подсказок или реагировать на действия пользователя.
Можно создавать несколько независимых экземпляров Intro.js для разных секций:
const tour1 = introJs('#section1');
const tour2 = introJs('#section2');
tour1.setOptions({ steps: [{ element: '#s1step1', intro: 'Первый тур, шаг 1' }] });
tour2.setOptions({ steps: [{ element: '#s2step1', intro: 'Второй тур, шаг 1' }] });
tour1.start();
// tour2.start() можно запускать позже
Преимущества:
Методы .setOptions(), .onbeforechange(),
.onchange() и .start() возвращают сам объект
Intro.js, что позволяет писать компактные цепочки:
introJs()
.setOptions({ steps: [{ element: '#step1', intro: 'Шаг 1' }] })
.onchange(el => console.log('Изменился шаг', el))
.start();
Цепочки делают код читабельным и удобным для сложных конфигураций.
introJs().setOptions({ steps: [...] })..start().Этот подход обеспечивает максимальную гибкость при построении интерактивных гидов на веб-странице.