Intro.js — это библиотека для создания интерактивных пошаговых подсказок на веб-страницах. Она позволяет выделять элементы интерфейса и сопровождать их пояснениями, улучшая пользовательский опыт. Подсказки могут быть простыми текстовыми блоками или включать заголовки, кнопки и действия.
Подключение библиотеки осуществляется через
<script> и <link> для CSS:
<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,
через который создаются и настраиваются подсказки.
Каждая подсказка привязывается к элементу DOM с помощью
атрибутов data-intro и
data-step:
<button id="saveBtn" data-step="1" data-intro="Нажмите здесь для сохранения изменений.">Сохранить</button>
<input type="text" data-step="2" data-intro="Введите сюда имя пользователя.">
data-intro — текст подсказки, который
будет показан пользователю.data-step — порядок отображения
подсказок. Библиотека автоматически сортирует элементы по возрастанию
этого числа.Дополнительно можно использовать
data-position, чтобы задавать положение
подсказки относительно элемента:
top, left, right,
bottom, auto.<button data-step="3" data-intro="Это кнопка настроек." data-position="right">Настройки</button>
После определения элементов нужно вызвать Intro.js для запуска пошаговой инструкции:
introJs().start();
Для большей гибкости используется цепочка методов:
introJs()
.setOptions({
steps: [
{
element: '#saveBtn',
intro: 'Сохраните изменения кнопкой.',
position: 'bottom'
},
{
element: 'input[type=text]',
intro: 'Введите имя пользователя.',
position: 'right'
}
],
showStepNumbers: true,
showBullets: false,
exitOnOverlayClick: true
})
.start();
steps — массив объектов с явным
указанием элементов и текста подсказок.showStepNumbers — отображение номера
шага на подсказке.showBullets — индикаторы шагов внизу
подсказки.exitOnOverlayClick — закрытие
подсказки при клике на затемнённую область.Intro.js поддерживает множество опций для персонализации:
tooltipClass — добавление CSS-класса к
подсказке.highlightClass — класс для
подсвечиваемого элемента.nextLabel, prevLabel,
skipLabel, doneLabel — текст кнопок
управления.scrollToElement — прокрутка страницы к
текущему элементу.Пример кастомизации:
introJs().setOptions({
tooltipClass: 'custom-tooltip',
highlightClass: 'custom-highlight',
nextLabel: 'Далее',
prevLabel: 'Назад',
doneLabel: 'Готово',
exitOnOverlayClick: false
}).start();
Intro.js позволяет отслеживать и управлять жизненным циклом подсказок через события:
onbeforechange — перед отображением
подсказки на шаге.onafterchange — после отображения
подсказки.oncomplete — после завершения всех
шагов.onexit — при досрочном завершении
пошаговой инструкции.Пример использования:
const intro = introJs();
intro.onbeforechange(function(targetElement) {
console.log('Подсказка меняется. Текущий элемент:', targetElement);
});
intro.onafterchange(function(targetElement) {
console.log('Подсказка отображена для:', targetElement);
});
intro.oncomplete(function() {
console.log('Пошаговая инструкция завершена.');
});
intro.start();
Шаги можно задавать не только через атрибуты DOM, но и динамически через JavaScript. Это полезно для элементов, создаваемых после загрузки страницы:
introJs().setOptions({
steps: [
{
element: document.querySelector('#dynamicBtn'),
intro: 'Это динамически добавленная подсказка.'
},
{
element: document.querySelector('#dynamicInput'),
intro: 'А это текстовое поле тоже добавлено программно.'
}
]
}).start();
Если требуется создать несколько независимых туров:
const tour1 = introJs().setOptions({ steps: [{ element: '#step1', intro: 'Тур 1, шаг 1' }] });
const tour2 = introJs().setOptions({ steps: [{ element: '#stepA', intro: 'Тур 2, шаг 1' }] });
tour1.start();
// позже можно вызвать tour2.start()
Каждый объект introJs() создаёт независимый экземпляр с
собственными настройками, что позволяет одновременно поддерживать разные
последовательности подсказок.
Подсказки могут содержать HTML для кнопок, ссылок и других элементов управления:
introJs().setOptions({
steps: [
{
element: '#interactive',
intro: '<strong>Важный шаг!</strong><br>Нажмите <button oncl ick="alert(\'Привет!\')">сюда</button> для действия.'
}
]
}).start();
Важно помнить, что встроенный HTML может потребовать дополнительного CSS для корректного отображения и адаптации под разные экраны.
Intro.js автоматически подстраивает подсказки под маленькие экраны, но рекомендуется:
auto для подсказок.introJs().setOptions({
steps: [
{ element: '#mobileBtn', intro: 'Кнопка на мобильном устройстве', position: 'auto' }
]
}).start();
Можно вручную переключаться между шагами:
const intro = introJs();
intro.start();
// Перейти к следующему шагу
intro.nextStep();
// Вернуться на предыдущий шаг
intro.previousStep();
// Пропустить тур
intro.exit();
Эти методы позволяют интегрировать подсказки с пользовательским интерфейсом и событиями, например, с кнопками «Пропустить тур» на странице.