Intro.js — это легковесная JavaScript-библиотека, позволяющая создавать пошаговые интерактивные гиды по веб-приложениям. Она особенно полезна при обновлениях интерфейса, где необходимо показать новые функции или изменения пользователю. Библиотека работает на чистом JavaScript и не требует сложной интеграции с фреймворками.
Ключевые возможности:
Для запуска интерактивного гида достаточно подключить скрипт и стили 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.start();
Каждый шаг можно привязать к элементу на странице через атрибуты:
<button data-intro="Это кнопка для отправки формы" data-step="1">Отправить</button>
introJs().start();
Важное отличие Intro.js — возможность динамически
управлять шагами через объект steps, что позволяет
создавать гибкие сценарии без жесткой привязки к DOM:
introJs().setOptions({
steps: [
{ element: '#step1', intro: 'Первый шаг' },
{ element: '#step2', intro: 'Второй шаг' },
{ element: '#step3', intro: 'Третий шаг' }
]
}).start();
Intro.js предоставляет широкий спектр опций:
showStepNumbers: отображение нумерации шагов.showButtons: управление отображением кнопок «Next»,
«Previous» и «Skip».exitOnOverlayClick: закрытие гида при клике на
затемненную область.tooltipPosition: позиционирование подсказки
относительно элемента (top, bottom,
left, right, auto).highlightClass: кастомизация стиля подсветки
элемента.Пример кастомизации:
introJs().setOptions({
showStepNumbers: true,
showButtons: true,
exitOnOverlayClick: false,
tooltipClass: 'customTooltip'
}).start();
Intro.js позволяет подписываться на события, что критически важно при тестировании после миграции интерфейса. Основные события:
onbeforechange(targetElement) — вызывается перед сменой
шага.onchange(targetElement) — при изменении шага.onafterchange(targetElement) — после завершения
изменения шага.oncomplete() — после прохождения всех шагов.onexit() — при досрочном завершении гида.Использование событий позволяет проверять корректность отображения элементов после изменений интерфейса:
introJs().onchange(function(targetElement) {
console.log('Текущий шаг:', targetElement);
}).start();
После переноса веб-приложения на новую версию часто возникают ситуации, когда элементы смещаются или теряются. Intro.js помогает автоматизировать проверку видимости и правильного позиционирования ключевых элементов.
Пример сценария проверки:
const steps = [
{ element: '#loginButton', intro: 'Кнопка входа', position: 'bottom' },
{ element: '#searchInput', intro: 'Поле поиска', position: 'right' },
{ element: '#profileMenu', intro: 'Меню пользователя', position: 'left' }
];
const tour = introJs().setOptions({ steps });
tour.onchange(function(target) {
if (!target.offsetParent) {
console.error('Элемент не виден после миграции:', target);
}
});
tour.start();
В случаях, когда структура страницы может изменяться после миграции, шаги можно формировать динамически:
const dynamicSteps = Array.from(document.querySelectorAll('.feature')).map((el, index) => ({
element: el,
intro: `Функция ${index + 1}`,
position: 'top'
}));
introJs().setOptions({ steps: dynamicSteps }).start();
Это позволяет адаптировать гид к различным версиям интерфейса без ручного изменения кода.
Пример интеграции с Cypress для проверки шагов:
cy.visit('/dashboard');
cy.window().then((win) => {
win.introJs().setOptions({ steps: [{ element: '#stats', intro: 'Статистика' }] }).start();
});
cy.get('.introjs-tooltip').should('contain.text', 'Статистика');
onchange и
onafterchange для обнаружения скрытых или
смещённых элементов.Такой подход гарантирует, что после миграции пользователи не столкнутся с отсутствием элементов или сломанной навигацией, а разработчики смогут быстро выявлять и исправлять ошибки в интерфейсе.