Intro.js — это гибкая библиотека для создания интерактивных пошаговых инструкций на веб-страницах. Помимо базовой функциональности, существует ряд специализированных версий и расширений, которые позволяют адаптировать библиотеку под конкретные задачи и особенности интерфейса. Разберем наиболее значимые из них и методы их применения.
Для интеграции с React существует обертка intro.js-react, которая позволяет управлять шагами через состояние компонентов и использовать возможности виртуального DOM. Основные особенности:
enabled.onExit, onBeforeStepChange,
onAfterChange для отслеживания взаимодействия
пользователя.Пример использования:
import { Steps } from 'intro.js-react';
import 'intro.js/introjs.css';
const tourSteps = [
{ element: '#step1', intro: 'Это первый шаг' },
{ element: '#step2', intro: 'Это второй шаг' },
];
function App() {
const [enabled, setEnabled] = React.useState(true);
return (
<div>
<Steps enabled={enabled} steps={tourSteps} onE xit={() => setEnabled(false)} />
<div id="step1">Элемент 1</div>
<div id="step2">Элемент 2</div>
</div>
);
}
Для проектов на Angular существует модуль ngx-introjs, который обеспечивает глубокую интеграцию с компонентной моделью:
[introStep] и
[introOptions].IntroService
можно запускать туры программно, что упрощает интеграцию с навигацией
или динамическим контентом.Пример декларативного использования:
<button [introStep]="1" [introOptions]="{ intro: 'Это кнопка запуска' }">Старт</button>
<div [introStep]="2" [introOptions]="{ intro: 'Контент второго шага' }">Контент</div>
Мобильные версии интерактивных туров требуют адаптации под сенсорное управление. В специализированных сборках:
viewport).Особенности реализации:
intro.setOptions({
showStepNumbers: false,
tooltipClass: 'mobile-tooltip',
exitOnOverlayClick: false,
scrollToElement: true,
});
scrollToElement: true обеспечивает плавное смещение
контента, чтобы элемент шага всегда оставался видимым.
Intro.js поддерживает несколько плагинов и расширений для специфических сценариев:
introjs-nextHint,
introjs-hint).Пример многоуровневого тура:
const level1Steps = [
{ element: '#a', intro: 'Шаг 1 уровня 1' },
{ element: '#b', intro: 'Шаг 2 уровня 1' }
];
const level2Steps = [
{ element: '#c', intro: 'Шаг 1 уровня 2' },
{ element: '#d', intro: 'Шаг 2 уровня 2' }
];
introJs().setOptions({ steps: level1Steps }).start().oncomplete(() => {
introJs().setOptions({ steps: level2Steps }).start();
});
В специализированных версиях для SPA или динамически загружаемых интерфейсов часто применяется подход динамической генерации шагов:
const steps = Array.from(document.querySelectorAll('.tour-step')).map((el, i) => ({
element: el,
intro: el.dataset.intro || `Шаг ${i+1}`
}));
introJs().setOptions({ steps }).start();
Специализированные сборки Intro.js позволяют полностью переопределять внешний вид подсказок:
Пример настройки темы:
introJs().setOptions({
tooltipClass: 'custom-tooltip',
highlightClass: 'custom-highlight',
showProgress: true
});
В CSS:
.custom-tooltip {
background-color: #1e90ff;
color: #fff;
border-radius: 10px;
padding: 15px;
}
.custom-highlight {
box-shadow: 0 0 10px #1e90ff;
}
Специализированные версии Intro.js позволяют отслеживать поведение пользователя:
onchange для фиксации, какие шаги были
просмотрены, сколько времени потрачено.introJs().onchange((targetElement) => {
console.log(`Просмотрен шаг: ${targetElement.id}`);
});
Специализированные версии Intro.js расширяют возможности библиотеки за счет интеграции с фреймворками, мобильными интерфейсами, динамическим контентом и аналитикой, предоставляя мощный инструмент для создания адаптивных и интерактивных обучающих туров.