Библиотека Driver.js предназначена для создания интерактивных пошаговых туров (onboarding), подсветки элементов интерфейса и демонстрации функциональности веб-приложений. Она позволяет управлять вниманием пользователя, последовательно акцентируя важные элементы страницы.
В основе работы лежит механизм затемнения экрана и выделения конкретного DOM-элемента с помощью маски, а также отображения всплывающего блока с описанием.
Ключевые задачи:
Библиотека написана на JavaScript и не требует зависимостей.
npm install driver.js
import Driver from "driver.js";
import "driver.js/dist/driver.css";
<link rel="stylesheet" href="https://unpkg.com/driver.js/dist/driver.min.css" />
<script src="https://unpkg.com/driver.js/dist/driver.min.js"></script>
Создание экземпляра:
const driver = new Driver();
Инициализация с настройками:
const driver = new Driver({
animate: true,
opacity: 0.75,
padding: 10,
allowClose: true
});
driver.highlight('#element');
Подсвечивает один элемент без сценария шагов.
driver.defineSteps([
{
element: '#step1',
popover: {
title: 'Шаг 1',
description: 'Описание первого шага',
position: 'bottom'
}
},
{
element: '#step2',
popover: {
title: 'Шаг 2',
description: 'Описание второго шага',
position: 'top'
}
}
]);
driver.start();
driver.reset();
| Параметр | Описание |
|---|---|
| animate | Включение анимации |
| opacity | Затемнение фона |
| padding | Отступ вокруг элемента |
| allowClose | Возможность закрытия |
| overlayClickNext | Переход по клику на фон |
| doneBtnText | Текст кнопки завершения |
Пример:
const driver = new Driver({
animate: true,
opacity: 0.6,
padding: 8,
doneBtnText: 'Готово',
closeBtnText: 'Закрыть'
});
Каждый шаг описывается объектом:
{
element: '#selector',
popover: {
title: 'Заголовок',
description: 'Описание',
position: 'right'
}
}
driver.moveNext();
driver.movePrevious();
driver.goTo(2);
Driver.js предоставляет хуки для отслеживания состояния.
const driver = new Driver({
onHighlightStarted: (element) => {
console.log('Подсветка началась:', element);
}
});
onHighlighted: (element) => {
console.log('Подсветка завершена');
}
onReset: () => {
console.log('Тур завершён');
}
const driver = new Driver({
nextBtnText: 'Далее',
prevBtnText: 'Назад',
doneBtnText: 'Завершить'
});
popover: {
title: 'Заголовок',
description: '<b>Жирный текст</b> и <i>курсив</i>'
}
Driver.js использует CSS, который можно переопределить.
.driver-popover {
background-color: #222;
color: #fff;
border-radius: 8px;
}
.driver-highlighted-element {
box-shadow: 0 0 10px rgba(255, 0, 0, 0.8);
}
В приложениях с динамической отрисовкой (React, Vue и др.) важно учитывать момент появления элементов.
setTimeout(() => {
driver.start();
}, 500);
if (document.querySelector('#element')) {
driver.highlight('#element');
}
driver.highlight({
element: '#button',
popover: {
description: 'Нажмите сюда'
}
});
Пример сложного сценария:
driver.defineSteps([
{
element: '#login',
popover: {
title: 'Авторизация',
description: 'Введите логин'
}
},
{
element: '#password',
popover: {
title: 'Пароль',
description: 'Введите пароль'
}
},
{
element: '#submit',
popover: {
title: 'Отправка',
description: 'Нажмите кнопку'
}
}
]);
Driver автоматически прокручивает страницу к элементу.
Отключение:
const driver = new Driver({
smoothScroll: false
});
const driver = new Driver({
disableInteraction: true
});
Подсветка полей формы:
driver.highlight('#email');
Комбинирование с валидацией:
if (!email.value) {
driver.highlight('#email');
}
В одностраничных приложениях важно:
Пример:
useEffect(() => {
driver.start();
}, []);
Запуск только при первом посещении:
if (!localStorage.getItem('tourShown')) {
driver.start();
localStorage.setItem('tourShown', true);
}
Причина:
Причина:
Причина:
start()Driver.js:
const steps = [];
if (isAdmin) {
steps.push({
element: '#admin',
popover: {
title: 'Админ панель'
}
});
}
driver.defineSteps(steps);
driver.reset();
driver.start();
const driver = new Driver({
onHighlighted: (el) => {
analytics.track('step_view', { element: el.id });
}
});
| Библиотека | Особенности |
|---|---|
| Driver.js | Простота, лёгкость |
| Intro.js | Более тяжёлая |
| Shepherd.js | Гибкость |
Driver.js:
const isTourActive = driver.isActivated;
Можно:
Driver.js:
Поддерживаются:
Driver.js можно комбинировать с:
Разделение шагов:
const baseSteps = [...];
const extraSteps = [...];
driver.defineSteps([...baseSteps, ...extraSteps]);
Ограничение закрытия:
allowClose: false
Сценарии:
Driver.js подходит для: