Библиотека Intro.js позволяет создавать пошаговые интерактивные подсказки без сложной логики на стороне JavaScript. Основной механизм управления сценарием тура — использование специальных HTML-атрибутов, которые описывают поведение, порядок и содержание шагов.
HTML-атрибуты обеспечивают декларативный подход: структура тура задаётся прямо в разметке, что упрощает сопровождение и делает код более читаемым.
data-introОпределяет текст подсказки, который будет показан пользователю.
<div data-intro="Это кнопка запуска процесса"></div>
Особенности:
data-stepЗадаёт порядок отображения шагов тура.
<div data-intro="Первый шаг" data-step="1"></div>
<div data-intro="Второй шаг" data-step="2"></div>
Особенности:
data-titleДобавляет заголовок к подсказке.
<div data-intro="Описание функции" data-title="Функция поиска"></div>
Особенности:
data-positionОпределяет положение всплывающей подсказки относительно элемента.
<div data-intro="Описание" data-position="right"></div>
Возможные значения:
toprightbottomleftautoОсобенности:
auto позволяет библиотеке выбрать оптимальное
положениеdata-tooltipClassПозволяет задать собственный CSS-класс для тултипа.
<div data-intro="Важно!" data-tooltipClass="customTooltip"></div>
Использование:
.customTooltip {
background-color: #333;
color: #fff;
}
data-highlightClassДобавляет CSS-класс к выделяемому элементу.
<div data-intro="Выделенный блок" data-highlightClass="highlighted"></div>
Пример:
.highlighted {
border: 2px solid red;
}
data-disable-interactionОтключает взаимодействие пользователя с элементом во время шага.
<div data-intro="Нельзя нажимать" data-disable-interaction="true"></div>
Особенности:
data-scrollToУправляет прокруткой страницы до элемента.
<div data-intro="Прокрутка к элементу" data-scrollTo="element"></div>
Возможные значения:
element — прокрутка к элементуtooltip — прокрутка к подсказкеdata-intro-group
(кастомное использование)Хотя не является встроенным, часто применяется для логической группировки шагов:
<div data-intro="Шаг A" data-intro-group="admin"></div>
<div data-intro="Шаг B" data-intro-group="user"></div>
Используется совместно с JavaScript для выборочного запуска туров.
data-intro<div data-intro="<b>Жирный текст</b><br>Новая строка"></div>
Особенности:
Если data-step не указан:
<div data-intro="Шаг 1"></div>
<div data-intro="Шаг 2"></div>
Порядок будет:
Недостатки:
При наличии нескольких параметров:
data-step — определяет порядокdata-position — влияет на отображениеdata-tooltipClass — влияет на внешний видdata-disable-interaction — влияет на поведениеHTML-атрибуты могут быть переопределены через Jav * aScript:
introJs().setOptions({
steps: [
{
element: document.querySelector('#id'),
intro: 'Описание'
}
]
});
При использовании steps:
1. Отсутствие data-intro
<div data-step="1"></div>
Шаг не будет отображён.
2. Дублирование data-step
<div data-step="1"></div>
<div data-step="1"></div>
Поведение становится непредсказуемым.
3. Некорректный HTML внутри
data-intro
<div data-intro="<div>Ошибка"></div>
Может привести к поломке тултипа.
<button
data-intro="Нажмите для запуска"
data-step="1"
data-position="bottom">
Старт
</button>
<input
data-intro="Введите данные"
data-step="2"
data-position="right">
Особенности:
Через JavaScript можно фильтровать элементы:
document.querySelectorAll('[data-intro]').forEach(el => {
if (someCondition) {
el.removeAttribute('data-intro');
}
});
element.setAttribute('data-intro', 'Новое описание');
Позволяет:
Использование HTML-атрибутов:
Однако при большом количестве шагов:
data-step| Подход | Преимущества | Недостатки |
|---|---|---|
| HTML-атрибуты | Простота, наглядность | Ограниченная гибкость |
| JavaScript | Полный контроль | Более сложный код |
data-stepdata-title для сложных интерфейсовdata-introdata-tooltipClass для единообразного
дизайнаIntro.js считывает атрибуты в момент запуска:
introJs().start();
Если элементы:
В React, Vue, Angular:
Пример (React):
<div data-intro="Описание" data-step="1"></div>
Наиболее полный пример:
<div
data-intro="Описание элемента"
data-step="3"
data-title="Заголовок"
data-position="left"
data-tooltipClass="customTooltip"
data-highlightClass="highlight"
data-disable-interaction="true">
</div>
Такой набор покрывает:
Грамотное использование HTML-атрибутов Intro.js позволяет строить сложные интерактивные сценарии без перегрузки JavaScript-логикой, сохраняя читаемость и управляемость кода.