Intro.js — это библиотека для создания интерактивных пошаговых инструкций по интерфейсу. Одной из важных задач при использовании интро-туров является корректная работа на разных устройствах и размерах экранов. В этом разделе рассматриваются методы адаптации, настройки и тонкости работы с динамическими размерами.
По умолчанию Intro.js вычисляет позицию подсказки относительно
целевого элемента. Для адаптации к разным экранам используется параметр
position, который может принимать значения:
topleftrightbottomauto — автоматический выбор оптимального положения,
исходя из видимой области окна.introJs().setOptions({
steps: [
{
element: '#menu',
intro: 'Это главное меню',
position: 'auto'
}
]
}).start();
Использование auto позволяет автоматически менять
позицию подсказки при изменении ширины экрана или ориентации
устройства.
Подсказки Intro.js имеют фиксированную ширину по умолчанию, что может создавать проблемы на маленьких экранах. Для контроля ширины можно использовать CSS:
.introjs-tooltip {
max-width: 90vw; /* максимум 90% ширины экрана */
min-width: 200px; /* минимальная ширина */
word-wrap: break-word; /* перенос слов для маленьких экранов */
}
Такой подход обеспечивает читаемость текста на смартфонах и планшетах, предотвращает выход подсказки за пределы видимой области.
Для обеспечения адаптивности необходимо отслеживать событие
resize и пересчитывать позиции подсказок:
window.addEventListener('resize', function() {
introJs().refresh(); // пересчитывает позиции всех активных шагов
});
Метод refresh() позволяет Intro.js корректно
позиционировать подсказки при изменении ширины или высоты окна.
В CSS можно использовать медиа-запросы для изменения стилей подсказок в зависимости от ширины экрана:
@media (max-width: 768px) {
.introjs-tooltip {
font-size: 14px;
padding: 10px;
}
.introjs-arrow {
display: none; /* скрываем стрелки на маленьких экранах */
}
}
Это позволяет улучшить восприятие информации и предотвратить наложение подсказок на элементы интерфейса.
Intro.js поддерживает анимацию появления подсказок. На маленьких экранах анимации могут создавать задержку, мешающую быстрому взаимодействию. Анимацию можно отключать или изменять через CSS:
.introjs-fadein {
transition: none !important; /* отключение анимации */
}
Для адаптивного поведения можно использовать условные классы и включать/отключать анимацию в зависимости от размера экрана.
const intro = introJs();
intro.setOptions({
steps: [
{
element: '#header',
intro: 'Главная панель навигации',
position: 'auto'
},
{
element: '#content',
intro: 'Основное содержимое страницы',
position: 'auto'
},
{
element: '#footer',
intro: 'Подвал с контактной информацией',
position: 'bottom'
}
]
});
// Пересчет позиций при изменении размера
window.addEventListener('resize', () => intro.refresh());
intro.start();
Этот подход гарантирует корректное отображение подсказок на любых устройствах и позволяет использовать преимущества автоматического позиционирования и CSS адаптации.
На мобильных устройствах часто возникает масштабирование страницы.
Intro.js учитывает viewport при расчете позиции, однако при
нестандартных масштабах полезно вручную корректировать положение:
intro.onbeforechange(function(targetElement) {
const viewportWidth = window.innerWidth;
if (viewportWidth < 500) {
this._introItems[this._currentStep].position = 'bottom';
}
});
Это позволяет гарантировать, что подсказки не будут перекрывать ключевые элементы интерфейса даже на компактных экранах.
При повороте устройства важно пересчитывать позиции:
window.addEventListener('orientationchange', () => {
introJs().refresh();
});
Комбинация событий resize и
orientationchange обеспечивает полную адаптивность
интро-тура, сохраняя комфортное взаимодействие с интерфейсом.
position: auto для автоматического выбора
позиции подсказки.max-width, word-wrap).resize и
orientationchange для динамической корректировки.Эти методы обеспечивают полноценную адаптивность интро-туров Intro.js, позволяя сохранять читаемость, удобство и точность позиционирования на любых устройствах.