Driver.js — это библиотека для создания интерактивных пошаговых туров по веб-приложению. Она позволяет выделять элементы страницы, показывать подсказки, управлять последовательностью действий и управлять вниманием пользователя через визуальные эффекты.
Для начала работы необходимо подключить библиотеку и создать
экземпляр Driver. Основной синтаксис:
const driver = new Driver({
animate: true, // Включение анимации переходов
opacity: 0.75, // Прозрачность оверлея
padding: 10, // Отступ вокруг выделяемого элемента
allowClose: false // Запрет закрытия кликами по оверлею
});
Параметры конструктора определяют базовое поведение тура, включая визуальные эффекты, взаимодействие с пользователем и возможности кастомизации.
Каждый шаг определяется объектом с обязательными и дополнительными свойствами:
driver.defineSteps([
{
element: '#menu', // CSS-селектор или DOM-элемент
popover: {
title: 'Главное меню',
description: 'Здесь находятся все разделы приложения',
position: 'bottom'
}
},
{
element: '#settings',
popover: {
title: 'Настройки',
description: 'Управление профилем и настройками',
position: 'right'
}
}
]);
Ключевые свойства шагов:
element — элемент, который будет выделен.popover.title — заголовок подсказки.popover.description — подробное описание.popover.position — позиция всплывающей подсказки
относительно элемента (top, bottom,
left, right, auto).popover.className — кастомный CSS-класс для стилизации
подсказки.onNext, onPrevious, onShow —
колбэки для управления логикой между шагами.Driver.js позволяет программно запускать, останавливать и перемещаться по шагам:
driver.start(); // Запуск тура с первого шага
driver.moveNext(); // Переход к следующему шагу
driver.movePrevious(); // Переход к предыдущему шагу
driver.reset(); // Сброс состояния тура
Можно запускать тур с конкретного шага:
driver.start(2); // Начать с третьего шага (индексация с нуля)
Колбэки onNext и onPrevious позволяют
добавлять логику условного перехода:
driver.defineSteps([
{
element: '#submit',
popover: { title: 'Кнопка отправки', description: 'Нажмите, чтобы отправить данные' },
onNext: () => {
console.log('Пользователь завершил шаг отправки');
}
}
]);
opacity — прозрачность затемнения фона.padding — пространство вокруг выделенного
элемента.className — кастомизация через CSS для подсветки или
оверлея.animate — плавные переходы при смене фокуса на
элемент.Driver.js автоматически подбирает оптимальное положение подсказки, но можно явно задавать позиции:
popover: {
title: 'Элемент',
description: 'Описание',
position: 'left'
}
Поддерживаются адаптивные значения:
auto — автоматический выбор позиции с учётом
видимости.centered — фиксированное расположение по центру
экрана.Driver.js генерирует события, которые позволяют интегрировать тур с бизнес-логикой:
driver.on('start', callback) — запуск тура.driver.on('reset', callback) — сброс тура.driver.on('complete', callback) — завершение всех
шагов.driver.on('next', callback) — переход к следующему
шагу.driver.on('previous', callback) — переход к предыдущему
шагу.driver.on('highlighted', callback) — элемент выделен и
виден пользователю.Пример использования событий:
driver.on('complete', () => {
console.log('Тур завершен');
});
Шаги можно добавлять или изменять в процессе выполнения тура:
driver.defineSteps([
{ element: '#newFeature', popover: { title: 'Новая функция', description: 'Демонстрация новой возможности' } }
]);
driver.addStep({
element: '#extra',
popover: { title: 'Дополнительно', description: 'Дополнительная подсказка' }
});
driver.removeStep(0); // Удаляет первый шаг
Это полезно для динамических интерфейсов, где элементы могут появляться после загрузки данных.
Для современных одностраничных приложений (React, Vue, Angular) важно учитывать асинхронную загрузку компонентов:
onShow для инициализации
динамических элементов:{
element: '#asyncElement',
popover: { title: 'Асинхронный элемент', description: 'Элемент загружается динамически' },
onShow: () => {
if (!document.querySelector('#asyncElement')) {
console.log('Элемент еще не загружен');
driver.moveNext();
}
}
}
driver.defineSteps([
{
element: '#featureX',
popover: { title: 'Функция X', description: 'Описание' },
onNext: () => {
if (!userHasAccess) driver.moveNext(2); // Пропустить шаги
}
}
]);
className
и подключение CSS-файлов.Next,
Previous, Close) через кастомные
селекторы:driver.overrideNextBtn('custom-next-btn');
driver.overridePreviousBtn('custom-prev-btn');
onNext, onPrevious,
onShow).Эта функциональность делает Driver.js гибким инструментом для создания интерактивных обучающих туров и навигации по сложным веб-интерфейсам, где важна последовательность действий, визуальное выделение элементов и реакция на поведение пользователя.