Driver.js — это библиотека JavaScript для создания интерактивных пошаговых подсказок и руководств по интерфейсу. Она позволяет выделять элементы страницы, добавлять поясняющие тексты и управлять последовательностью шагов, создавая удобные и наглядные пользовательские гиды.
Главная задача библиотеки — минимизировать ручное управление позиционированием подсказок и их состоянием, предоставляя гибкий API для настройки каждого шага.
Для начала работы создается экземпляр Driver:
const driver = new Driver({
animate: true, // Анимация переходов между шагами
opacity: 0.75, // Прозрачность затемнения фона
padding: 10, // Отступ вокруг выделяемого элемента
allowClose: false // Запрет закрытия кликами по затемнению
});
Ключевые параметры конфигурации:
animate — плавные переходы между шагами.opacity — регулирует затемнение неактивной области
страницы.padding — создает пространство вокруг выделенного
элемента для визуального комфорта.allowClose — управляет возможностью закрытия подсказки
кликом по затемнению.После инициализации можно добавлять шаги:
driver.defineSteps([
{
element: '#menu', // CSS-селектор выделяемого элемента
popover: {
title: 'Главное меню',
description: 'Содержит навигацию по сайту',
position: 'bottom'
}
},
{
element: '#search',
popover: {
title: 'Поиск',
description: 'Введите запрос для поиска контента',
position: 'right'
}
}
]);
Каждый шаг включает элемент, который будет выделен, и popover, описывающий текст, заголовок и позицию подсказки.
Часто одни и те же шаги могут использоваться на разных страницах. Для этого целесообразно создать отдельный модуль:
export const tutorialSteps = {
homepage: [
{
element: '#banner',
popover: { title: 'Баннер', description: 'Основное визуальное приветствие', position: 'bottom' }
},
{
element: '#features',
popover: { title: 'Особенности', description: 'Описание ключевых возможностей', position: 'top' }
}
],
dashboard: [
{
element: '#stats',
popover: { title: 'Статистика', description: 'Отображение ключевых показателей', position: 'right' }
}
]
};
Это позволяет использовать один и тот же набор шагов в разных частях приложения, подключая их по необходимости:
import { tutorialSteps } from './tutorialSteps.js';
const driver = new Driver();
driver.defineSteps(tutorialSteps.homepage);
driver.start();
Для управления гидами удобно создавать обертку:
function startTutorial(page) {
const driver = new Driver({ animate: true, opacity: 0.8, padding: 15 });
if (!tutorialSteps[page]) return;
driver.defineSteps(tutorialSteps[page]);
driver.start();
}
Теперь запуск гида сводится к одной строке:
startTutorial('dashboard');
Это решение делает код компактным и легко расширяемым.
Driver.js предоставляет события, которые позволяют интегрировать гиды с бизнес-логикой:
driver.on('start', callback) — запуск гида.driver.on('next', callback) — переход к следующему
шагу.driver.on('close', callback) — завершение гида.Пример использования событий для сохранения прогресса пользователя:
driver.on('next', step => {
localStorage.setItem('tutorialStep', step.index);
});
driver.on('close', () => {
localStorage.setItem('tutorialCompleted', true);
});
Шаги могут добавляться или изменяться в процессе выполнения:
driver.defineSteps([
{ element: '#dynamic', popover: { title: 'Динамический блок', description: 'Создан на лету', position: 'left' } }
]);
driver.start();
Это особенно полезно для приложений с контентом, который подгружается асинхронно.
Такой подход позволяет строить гибкие, масштабируемые и легко поддерживаемые интерактивные гиды на базе Driver.js, которые можно повторно использовать на разных страницах и в разных проектах, сокращая дублирование кода и повышая удобство сопровождения.