Для создания длинных туров в Intro.js используется
объект introJs(), который позволяет пошагово выделять
элементы страницы, добавлять описания, кнопки навигации и настраивать
поведение для каждого шага. Длинные туры подразумевают большое
количество шагов и часто требуют детальной настройки порядка и условий
их отображения.
const tour = introJs();
tour.setOptions({
steps: [
{
element: '#step1',
intro: 'Описание первого шага',
position: 'bottom'
},
{
element: '#step2',
intro: 'Описание второго шага',
position: 'right'
},
// Добавление множества шагов
],
showStepNumbers: true,
showBullets: true,
exitOnOverlayClick: false,
scrollToElement: true
});
tour.start();
Ключевые моменты при длинных турах:
steps для точного задания порядка
шагов.position
(top, bottom, left,
right, auto).scrollToElement: true, что важно при длинных
страницах.exitOnOverlayClick: false, чтобы предотвратить случайное
завершение.Intro.js предоставляет методы для управления навигацией по шагам:
nextStep(), previousStep(),
goToStep(number). Для длинных туров это позволяет создавать
условия перехода между шагами, динамически пропускать или добавлять шаги
в зависимости от состояния страницы.
tour.onbeforechange(function(targetElement) {
if (targetElement.id === 'step5') {
// Пропустить шаг, если элемент скрыт
if (targetElement.style.display === 'none') {
tour.nextStep();
}
}
});
Особенности:
onbeforechange позволяет изменять поведение перед
отображением каждого шага.onafterchange используется для действий после показа
подсказки (например, открытие модального окна).oncomplete и onexit — события для
завершения тура.Для длинных туров часто удобно генерировать шаги динамически, особенно если интерфейс сложный или шаги зависят от данных. Создание массива шагов можно вынести в отдельную функцию:
function generateTourSteps() {
const steps = [];
document.querySelectorAll('.tour-element').forEach((el, index) => {
steps.push({
element: el,
intro: `Шаг ${index + 1}: ${el.dataset.description}`,
position: el.dataset.position || 'bottom'
});
});
return steps;
}
tour.setOptions({ steps: generateTourSteps() });
tour.start();
Преимущества:
Для длинных туров важно контролировать пользовательский опыт:
showButtons,
showBullets — включение кнопок «Далее», «Назад» и
индикатора шагов.position: 'auto'
автоматически выбирает оптимальное расположение подсказки.disableInteraction: true блокирует элементы страницы,
предотвращая случайные клики во время показа тура.tour.setOptions({
disableInteraction: true,
tooltipClass: 'custom-tooltip',
nextLabel: 'Далее',
prevLabel: 'Назад',
skipLabel: 'Пропустить'
});
При большом количестве шагов важно учитывать производительность и удобство пользователя:
tooltipClass и
highlightClass помогает улучшить видимость и читаемость
подсказок.const steps = [
{ element: '#step1', intro: translations['step1'][lang] },
{ element: '#step2', intro: translations['step2'][lang] }
];
tour.setOptions({ steps });
В одностраничных приложениях длинные туры требуют особого подхода:
MutationObserver.const observer = new MutationObserver(() => {
tour.setOptions({ steps: generateTourSteps() });
});
observer.observe(document.body, { childList: true, subtree: true });
Такой подход обеспечивает корректное отображение всех шагов тура даже при динамическом контенте, что особенно важно для крупных веб-приложений с множеством интерактивных элементов.