Driver.js предоставляет гибкий механизм указания элементов на странице для пошаговых инструкций и подсказок. Основой работы с элементами является селектор, который позволяет точно определить, к какому DOM-узлу будет применяться подсветка и подсказка.
const driver = new Driver();
driver.defineSteps([
{
element: '#submit-button', // по ID
popover: {
title: 'Отправка формы',
description: 'Нажмите здесь, чтобы отправить форму.'
}
},
{
element: '.nav-item.active', // по классу
popover: {
title: 'Активный пункт меню',
description: 'Выбранный пункт меню подсвечен.'
}
}
]);
:nth-child,
:first-child) и атрибутные селекторы
([data-role="main"]).{
element: 'ul.menu > li:nth-child(3) a',
popover: {
title: 'Третий пункт меню',
description: 'Ссылка ведет к разделу о продуктах.'
}
}
Driver.js отлично работает с data-атрибутами, что позволяет не привязываться к классам или идентификаторам, которые могут меняться. Это особенно полезно для динамических интерфейсов.
{
element: '[data-step="checkout"]',
popover: {
title: 'Оформление заказа',
description: 'Нажмите здесь, чтобы перейти к оформлению.'
}
}
В некоторых случаях элемент может отсутствовать в момент инициализации. Driver.js поддерживает функции возврата элемента, что позволяет вычислять его динамически.
{
element: () => document.querySelector('.dynamic-element'),
popover: {
title: 'Динамический элемент',
description: 'Элемент может появиться позже после загрузки контента.'
}
}
Если нужно подсветить несколько элементов, Driver.js позволяет задавать массив элементов. Каждый из них получит отдельный шаг.
const steps = Array.from(document.querySelectorAll('.feature-item')).map((el, index) => ({
element: el,
popover: {
title: `Функция ${index + 1}`,
description: 'Описание функционального блока.'
}
}));
driver.defineSteps(steps);
Driver.js автоматически проверяет, существует ли элемент на странице перед применением шага. Если элемент не найден, шаг пропускается, что предотвращает ошибки во время выполнения.
isSkip позволяет явно указать,
что шаг нужно пропустить при отсутствии элемента:{
element: '#optional-element',
popover: {
title: 'Опциональный блок',
description: 'Элемент может отсутствовать.'
},
isSkip: true
}
div,
.btn) — это может привести к подсветке нескольких элементов
одновременно..menu li.active a) дают
точность, но при изменении структуры страницы могут потребовать
обновления.С помощью селекторов можно комбинировать Driver.js с логикой страницы, проверяя наличие или состояние элемента перед запуском шага.
if (document.querySelector('.promo-banner')) {
driver.defineSteps([{
element: '.promo-banner',
popover: {
title: 'Акция',
description: 'Промо-баннер с текущей акцией.'
}
}]);
}
Driver.js поддерживает прокрутку до элемента. Если элемент находится за пределами видимой области, он автоматически скроллится в центр экрана. Это работает для любых селекторов, что делает их выбор критически важным для корректного отображения подсказки.
{
element: '#footer-link',
popover: {
title: 'Ссылка в подвале',
description: 'Подсказка автоматически прокрутит страницу.'
}
}
Использование селекторов в Driver.js обеспечивает точное управление шагами и позволяет строить гибкие, надежные интерактивные руководства по интерфейсу. Сочетание CSS-селекторов, data-атрибутов и динамических функций делает библиотеку максимально универсальной для любых проектов.