Driver.js — это лёгкая библиотека для реализации интерактивных пошаговых туров по интерфейсу веб-приложений. Она позволяет создавать подсказки, которые акцентируют внимание пользователя на определённых элементах страницы и сопровождаются описательными текстами. Основная концепция строится вокруг шагов (steps), каждый из которых привязан к конкретному элементу DOM.
const driver = new Driver();
driver.defineSteps([
{
element: '#menu',
popover: {
title: 'Меню',
description: 'Здесь находятся все основные разделы приложения.',
position: 'bottom'
}
},
{
element: '#profile-button',
popover: {
title: 'Профиль',
description: 'Нажмите, чтобы просмотреть и редактировать свой профиль.',
position: 'left'
}
}
]);
driver.start();
Ключевые моменты:
element — селектор или ссылка на DOM-элемент, к
которому привязывается шаг.popover — объект с настройками отображаемой подсказки
(title, description,
position).position может принимать значения top,
bottom, left, right,
auto.Каждый шаг можно детально настраивать через свойства popover и дополнительные параметры:
Интерактивность allowClose: false
запрещает закрытие подсказки до завершения шага.
Кастомизация кнопок Можно изменить текст кнопок перехода и закрытия:
const driver = new Driver({
nextBtnText: 'Далее',
prevBtnText: 'Назад',
closeBtnText: 'Закрыть'
});События на шаге Библиотека предоставляет хуки:
driver.on('next', (step) => {
console.log('Переход к следующему шагу:', step);
});
driver.on('close', () => {
console.log('Тур завершён');
});Условная навигация позволяет изменять поток шагов в зависимости от состояния приложения или действий пользователя. Для этого используется возможность динамического формирования массива шагов или управления потоком с помощью событий.
let steps = [
{
element: '#start-button',
popover: { title: 'Старт', description: 'Нажмите, чтобы начать.', position: 'bottom' }
}
];
if (user.isAdmin) {
steps.push({
element: '#admin-panel',
popover: { title: 'Панель администратора', description: 'Только для администраторов.', position: 'right' }
});
}
driver.defineSteps(steps);
driver.start();
Здесь шаг с панелью администратора добавляется только если пользователь имеет права администратора, что позволяет создавать персонализированные туры.
Можно изменять порядок шагов на лету:
driver.on('next', (step) => {
if (step.popover.title === 'Старт' && !user.completedIntro) {
driver.defineSteps([
{ element: '#intro-section', popover: { title: 'Введение', description: 'Обзор функционала', position: 'top' } },
{ element: '#features', popover: { title: 'Функции', description: 'Основные возможности', position: 'bottom' } }
]);
}
});
Событие next позволяет внедрять условия и менять шаги
перед переходом, обеспечивая гибкость и адаптивность тура.
Driver.js может автоматически прокручивать страницу к нужному элементу. В сочетании с условной логикой это позволяет создавать туры, которые подстраиваются под текущий контент.
driver.defineSteps([
{
element: '#dynamic-element',
popover: { title: 'Динамический элемент', description: 'Появляется после действия.', position: 'top' },
onNext: () => {
document.querySelector('#dynamic-element').style.display = 'block';
}
}
]);
onNext позволяет изменить состояние элемента перед
показом подсказки.
Стили подсказок Через className
можно задать собственные CSS-классы для каждого шага:
{
element: '#settings',
popover: { title: 'Настройки', description: 'Настройте приложение под себя.', className: 'custom-popover' }
}Поддержка асинхронных действий Шаг может ожидать выполнения промиса:
{
element: '#load-data',
popover: { title: 'Загрузка данных', description: 'Подождите...', position: 'bottom' },
onNext: async () => {
await fetchData();
}
}Driver.js легко интегрируется с React, Vue и Angular, используя хуки жизненного цикла компонентов. Это особенно важно для условной навигации, когда шаги зависят от состояния приложения:
useEffect для определения
шагов после рендера.Условная навигация в Driver.js позволяет:
Такой подход обеспечивает гибкость и персонализацию обучения пользователей, делая интерфейс более понятным и интерактивным.