Intro.js предоставляет гибкий механизм создания интерактивных руководств по пользовательскому интерфейсу с подсказками и подсветкой элементов. Одной из полезных возможностей является автоматическое скрытие хинтов, что позволяет оптимизировать пользовательский опыт без необходимости ручного закрытия подсказок.
Автоматическое скрытие хинта в Intro.js выполняется за счёт параметра
hintTimeout. Этот параметр задаёт время в миллисекундах,
через которое хинт исчезнет автоматически.
introJs().addHints();
introJs().setOptions({
hintTimeout: 5000 // 5 секунд
});
В данном примере все хинты будут автоматически закрываться через 5 секунд после появления.
По умолчанию hintTimeout применяется ко всем хинтам
глобально. Для тонкой настройки можно управлять хинтами отдельно через
объект data-hint. Однако для индивидуального времени
скрытия требуется использование кастомного скрипта, так как Intro.js не
поддерживает отдельные таймауты на уровне атрибутов HTML напрямую.
Пример индивидуального скрытия с помощью Jav * aScript:
document.querySelectorAll('.introjs-hint').forEach((hint, index) => {
setTimeout(() => {
hint.remove();
}, (index + 1) * 3000); // для каждого хинта своё время
});
Здесь хинты исчезают последовательно: первый через 3 секунды, второй через 6 и так далее.
Intro.js позволяет автоматически закрывать хинты, если пользователь
взаимодействует с подсвечиваемым элементом. Это настраивается через
событие onHintClick:
introJs().onHintClick(function(element) {
element.style.display = 'none'; // скрытие хинта при клике
});
Такой подход обеспечивает динамичное управление подсказками без вмешательства пользователя в другие элементы интерфейса.
Если используется сочетание шагов и хинтов, важно управлять скрытием
подсказок при переходе между шагами. Для этого можно использовать
событие onafterchange:
introJs().onafterchange(function(targetElement) {
document.querySelectorAll('.introjs-hint').forEach(hint => {
if (!targetElement.contains(hint)) {
hint.style.display = 'none';
}
});
});
Это предотвращает наложение старых хинтов на новые шаги и поддерживает чистоту интерфейса.
Оптимальный подход заключается в сочетании hintTimeout и
событий onHintClick или onafterchange. Это
позволяет:
Пример комбинированной реализации:
introJs().setOptions({ hintTimeout: 4000 }).addHints()
.onHintClick(element => {
element.style.display = 'none';
})
.onafterchange(target => {
document.querySelectorAll('.introjs-hint').forEach(hint => {
if (!target.contains(hint)) hint.style.display = 'none';
});
});
hintTimeout — слишком короткий период может не дать
пользователю прочитать подсказку, слишком длинный — раздражать.hintTimeout для базового контроля времени и
локальные обработчики для динамичных интерфейсов.На страницах с динамически подгружаемым контентом важно обновлять хинты после загрузки элементов:
introJs().addHints();
setTimeout(() => {
introJs().refreshHints();
}, 1000); // обновление хинтов после загрузки DOM
Метод refreshHints() пересчитывает позицию хинтов, что
гарантирует их корректное отображение перед автоматическим скрытием.
Автоматическое скрытие хинтов в Intro.js обеспечивает баланс между информативностью и минимальной навязчивостью интерфейса, делая подсказки эффективным инструментом обучения пользователя без излишнего вмешательства.