Библиотека Intro.js предоставляет встроенные механизмы для плавного показа и скрытия подсказок, что позволяет создавать интерактивные руководства с визуально привлекательной анимацией. Контролировать эти эффекты можно через CSS-классы, встроенные опции и пользовательские события.
По умолчанию подсказки Intro.js используют простую анимацию появления через плавное изменение прозрачности и сдвиг по вертикали. Основные способы управления:
Опции при инициализации:
introJs().setOptions({
showStepNumbers: true,
tooltipClass: 'customTooltip',
highlightClass: 'customHighlight',
exitOnOverlayClick: false
}).start();
tooltipClass — позволяет задать собственный CSS-класс,
где можно прописать анимацию появления.highlightClass — класс для подсветки элемента, который
также можно анимировать.Кастомные CSS-анимации: Появление подсказки можно настроить через ключевые кадры:
.customTooltip {
opacity: 0;
transform: translateY(-10px);
transition: all 0.4s ease;
}
.customTooltip.introjs-show {
opacity: 1;
transform: translateY(0);
}
Здесь используется класс .introjs-show, который
добавляется Intro.js при показе шага.
Использование событий Intro.js: События
onbeforechange и onafterchange позволяют
запускать анимацию вручную:
introJs().onbeforechange(function(targetElement) {
const tooltip = document.querySelector('.introjs-tooltip');
tooltip.style.opacity = 0;
tooltip.style.transform = 'translateY(-10px)';
}).onafterchange(function(targetElement) {
const tooltip = document.querySelector('.introjs-tooltip');
setTimeout(() => {
tooltip.style.opacity = 1;
tooltip.style.transform = 'translateY(0)';
}, 50);
}).start();Скрытие шагов также можно настраивать через CSS и события:
Плавное исчезновение через CSS:
.customTooltip.introjs-hide {
opacity: 0;
transform: translateY(-10px);
transition: all 0.3s ease;
}
.introjs-hide добавляется при закрытии
подсказки.transition и transform
обеспечивают плавность исчезновения.События для анимации скрытия:
introJs().onbeforeexit(function() {
const tooltip = document.querySelector('.introjs-tooltip');
tooltip.classList.add('introjs-hide');
return new Promise(resolve => {
setTimeout(resolve, 300); // ждем окончания анимации
});
}).start();
Этот подход позволяет завершать скрытие только после окончания CSS-анимации.
Intro.js поддерживает комбинации анимаций для подсказки и подсветки одновременно:
Всплывающие подсказки с масштабированием:
.customTooltip {
opacity: 0;
transform: scale(0.9);
transition: all 0.4s ease;
}
.customTooltip.introjs-show {
opacity: 1;
transform: scale(1);
}Подсветка элемента с пульсацией:
.customHighlight {
animation: pulse 1s infinite;
}
@keyframes pulse {
0% { box-shadow: 0 0 0 0 rgba(0, 123, 255, 0.5); }
70% { box-shadow: 0 0 0 10px rgba(0, 123, 255, 0); }
100% { box-shadow: 0 0 0 0 rgba(0, 123, 255, 0); }
}Комбинация появления с затуханием фона: Для затемнения области вне текущего шага можно анимировать overlay:
.introjs-overlay {
opacity: 0;
transition: opacity 0.5s ease;
}
.introjs-overlay.introjs-show {
opacity: 0.7;
}Для более естественного восприятия можно добавлять задержку перед показом или скрытием:
introJs().onafterchange(function() {
const tooltip = document.querySelector('.introjs-tooltip');
tooltip.style.transitionDelay = '0.2s';
});
transition-delay позволяет добиться эффекта «мягкого
входа» подсказки.setTimeout для
синхронизации сложных анимаций.Intro.js легко сочетается с GSAP, Anime.js или другими библиотеками:
introJs().onafterchange(function(targetElement) {
gsap.fromTo('.introjs-tooltip',
{ opacity: 0, y: -20 },
{ opacity: 1, y: 0, duration: 0.5 }
);
}).start();
Такой подход открывает возможность создавать более сложные эффекты, например, вращение, масштабирование и перекрестные анимации подсказки и highlight одновременно.
will-change: transform, opacity для
повышения производительности.Эти методы позволяют создавать плавные, визуально привлекательные и интерактивные подсказки с помощью Intro.js, обеспечивая гибкий контроль над каждым этапом появления и скрытия элементов интерфейса.