Контекстные туры в библиотеке Intro.js позволяют создавать пошаговые интерактивные подсказки для пользователей, сопровождающие элементы интерфейса. Каждый шаг тура привязан к конкретному DOM-элементу и может содержать текстовую подсказку, заголовок, кнопки навигации и дополнительные параметры отображения.
Для начала необходимо подключить Intro.js к проекту:
<link rel="stylesheet" href="https://unpkg.com/intro.js/minified/introjs.min.css">
<script src="https://unpkg.com/intro.js/minified/intro.min.js"></script>
После подключения можно создавать туры через объект
introJs().
const tour = introJs();
tour.setOptions({
steps: [
{
element: '#step1',
intro: 'Это первый шаг тура.'
},
{
element: '#step2',
intro: 'Следующий шаг с пояснением.'
}
],
showBullets: true,
exitOnOverlayClick: false
});
tour.start();
Каждый шаг можно настраивать следующими ключевыми параметрами:
element — CSS-селектор или DOM-элемент, к которому
будет привязана подсказка.intro — текст подсказки, который будет отображен
пользователю.position — позиция подсказки относительно элемента
(top, right, bottom,
left, auto).tooltipClass — CSS-класс для стилизации подсказки на
конкретном шаге.highlightClass — CSS-класс для подсветки элемента.disableInteraction — блокирует взаимодействие с
элементом на данном шаге (по умолчанию false).Пример с указанием позиции и кастомной подсветки:
tour.setOptions({
steps: [
{
element: '#step1',
intro: 'Обратите внимание на этот элемент',
position: 'right',
highlightClass: 'custom-highlight',
tooltipClass: 'custom-tooltip',
disableInteraction: true
}
]
});
Intro.js позволяет настраивать поведение кнопок и автоматическую навигацию между шагами:
nextLabel — текст кнопки «Далее».prevLabel — текст кнопки «Назад».doneLabel — текст кнопки «Готово».skipLabel — текст кнопки «Пропустить».showStepNumbers — отображение номеров шагов.tour.setOptions({
nextLabel: 'Вперед',
prevLabel: 'Назад',
doneLabel: 'Завершить',
skipLabel: 'Пропустить',
showStepNumbers: true
});
Для более динамичного управления можно использовать методы:
goToStep(n) — перейти на шаг с индексом
n.nextStep() — перейти к следующему шагу.previousStep() — вернуться к предыдущему шагу.exit() — завершить тур в любой момент.Intro.js предоставляет события, которые позволяют реагировать на действия пользователя:
onbeforechange — срабатывает перед отображением нового
шага.onafterchange — срабатывает после отображения
шага.oncomplete — вызывается при завершении тура.onexit — вызывается при преждевременном выходе из
тура.Пример использования событий:
tour.onbeforechange(function(targetElement) {
console.log('Переходим к элементу:', targetElement);
});
tour.onafterchange(function(targetElement) {
console.log('Отобразился шаг для:', targetElement);
});
tour.oncomplete(function() {
console.log('Тур завершен');
});
tour.onexit(function() {
console.log('Тур был прерван');
});
Intro.js поддерживает динамическое определение шагов, что позволяет показывать подсказки только при определенных условиях. Например, шаг может отображаться только если элемент существует:
const steps = [
{
element: '#step1',
intro: 'Первый шаг всегда отображается'
}
];
if (document.querySelector('#step2')) {
steps.push({
element: '#step2',
intro: 'Второй шаг появляется только если элемент существует'
});
}
introJs().setOptions({ steps }).start();
Для контекстных туров можно полностью изменить визуальное оформление с помощью CSS. Основные классы:
.introjs-tooltip — контейнер подсказки..introjs-arrow — стрелка, указывающая на элемент..introjs-tooltiptext — текст подсказки..introjs-bullets — индикаторы шагов.Пример кастомного оформления:
.introjs-tooltip {
background-color: #222;
color: #fff;
border-radius: 8px;
padding: 15px;
}
.introjs-arrow {
border-top-color: #222 !important;
}
.custom-highlight {
border: 2px solid #f39c12;
box-shadow: 0 0 10px #f39c12;
}
Intro.js поддерживает плавное появление подсказок с помощью
CSS-анимаций. Можно использовать стандартные свойства
transition или подключить сторонние библиотеки для более
сложных эффектов:
.introjs-tooltip {
opacity: 0;
transform: translateY(-10px);
transition: opacity 0.3s ease, transform 0.3s ease;
}
.introjs-showElement .introjs-tooltip {
opacity: 1;
transform: translateY(0);
}
Контекстные туры можно применять к элементам, создаваемым динамически через JavaScript или фреймворки вроде React или Vue. В этом случае важно инициализировать тур после того, как элементы добавлены в DOM:
setTimeout(() => {
introJs().setOptions({
steps: [
{ element: '#dynamicStep', intro: 'Динамически созданный элемент' }
]
}).start();
}, 500);
Контекстные туры в Intro.js обеспечивают полное управление пользовательским обучением в интерфейсе: пошаговое сопровождение, условное отображение, кастомизация визуала и контроль навигации. С помощью событий и динамического формирования шагов можно создавать сложные интерактивные гиды для любого веб-приложения.