Driver.js — это легковесная библиотека для создания пошаговых интерактивных руководств по интерфейсу веб-приложений. Она позволяет фокусировать внимание пользователя на ключевых элементах страницы, создавать последовательные шаги и управлять визуальными подсказками без сложной интеграции.
Библиотека работает с CSS-селекторами, что обеспечивает гибкость в выборе элементов для подсветки, и поддерживает настройку стилей, анимации и текстовых подсказок для каждого шага.
import Driver from 'driver.js';
import 'driver.js/dist/driver.min.css';
const driver = new Driver({
animate: true,
opacity: 0.75,
padding: 10,
allowClose: false
});
Шаги определяются через массив объектов, где каждый объект содержит селектор элемента, текст подсказки и опциональные настройки:
driver.defineSteps([
{
element: '#menu-button',
popover: {
title: 'Меню',
description: 'Нажмите здесь, чтобы открыть меню.',
position: 'bottom'
}
},
{
element: '#search-box',
popover: {
title: 'Поиск',
description: 'Введите запрос для поиска данных.',
position: 'right'
}
}
]);
Ключевые параметры:
element — CSS-селектор элемента, который будет
подсвечен.popover.title — заголовок подсказки.popover.description — описание действия.popover.position — позиция подсказки относительно
элемента (top, bottom, left,
right).В реальных сценариях часто требуется изменять последовательность шагов в зависимости от состояния интерфейса или действий пользователя. Driver.js поддерживает динамическое добавление, пропуск и условное выполнение шагов.
Можно добавлять шаги в процессе выполнения, чтобы адаптировать маршрут обучения:
driver.on('next', (step) => {
if (step.popover.title === 'Меню') {
driver.defineSteps([
{
element: '#submenu',
popover: {
title: 'Подменю',
description: 'Выберите нужный пункт.',
position: 'right'
}
}
], { insertAfter: step });
}
});
Параметр insertAfter позволяет встроить новые шаги после
текущего, не нарушая последовательность.
Для условного пропуска можно использовать событие
beforeStep:
driver.on('beforeStep', (step) => {
if (!document.querySelector('#optional-feature')) {
driver.moveNext(); // пропуск шага, если элемент отсутствует
}
});
Можно полностью контролировать маршрут обучения через пользовательские условия:
driver.on('next', (step) => {
if (step.popover.title === 'Поиск' && userHasNoAccess()) {
driver.moveToStep(3); // перескакиваем к определенному шагу
}
});
Эта техника позволяет создавать разветвленные сценарии, когда шаги зависят от прав пользователя, состояния интерфейса или предыдущих действий.
Важная особенность ветвления — возможность ожидать асинхронных событий, прежде чем показывать следующий шаг.
driver.on('beforeStep', async (step) => {
if (step.popover.title === 'Данные') {
await fetchDataFromAPI();
}
});
Такой подход гарантирует, что подсказка появится только после загрузки необходимых данных, что предотвращает ошибки и пустые элементы.
Driver.js предоставляет множество событий, которые позволяют управлять логикой:
beforeStart — перед запуском всех шагов.beforeStep — перед показом каждого шага (подходит для
ветвления).next — после перехода к следующему шагу.previous — после возврата к предыдущему шагу.close — при закрытии руководства.Используя эти события, можно комбинировать ветвление, пропуск и динамическое добавление шагов, создавая сложные интерактивные сценарии.
Для реализации сложной логики полезно хранить текущее состояние
пользователя или интерфейса. Например, объект driverState
может содержать данные о просмотренных шагах или разрешениях:
const driverState = {
completedSteps: [],
hasFeatureX: false
};
driver.on('next', (step) => {
driverState.completedSteps.push(step.popover.title);
});
На основе этого состояния можно принимать решения о следующем шаге, ветвлениях и пропуске подсказок.
Для ветвящейся логики удобно использовать динамически формируемые подсказки:
driver.defineSteps([
{
element: '#dynamic',
popover: {
title: 'Статус: ' + (driverState.hasFeatureX ? 'Включен' : 'Выключен'),
description: 'Настройка зависит от текущего состояния.',
position: 'bottom'
}
}
]);
Так можно визуально отображать изменения интерфейса и состояния, интегрируя их в пошаговое руководство.
Комбинация:
позволяет строить сложные, адаптивные интерактивные туры, которые подстраиваются под действия пользователя и текущее состояние приложения.
В результате Driver.js становится инструментом не только для линейного обучения, но и для построения гибких, разветвленных сценариев с динамическим поведением.