Driver.js предоставляет встроенные механизмы для автоматического
фокусирования на элементах интерфейса, включая те, которые изначально
находятся вне видимой области окна браузера. Основным инструментом здесь
является автоматическая прокрутка
(scrollIntoView), которая обеспечивает корректное
отображение выделяемого элемента в центре или в нужной позиции
экрана.
Каждый шаг в Driver.js описывается объектом с параметрами:
const steps = [
{
element: '#target-element',
popover: {
title: 'Заголовок',
description: 'Описание действия с элементом',
position: 'top'
},
onNext: () => console.log('Переход к следующему шагу')
}
];
Чтобы элемент автоматически прокручивался в видимую область, можно
использовать свойство scrollIntoViewOptions:
const steps = [
{
element: '#target-element',
popover: { title: 'Элемент вне экрана', description: 'Этот элемент будет виден после прокрутки', position: 'bottom' },
scrollIntoViewOptions: { beh * avior: 'smooth', block: 'center', inline: 'nearest' }
}
];
'smooth' или
'auto'. 'smooth' создаёт плавную анимацию
прокрутки.'start', 'center',
'end', 'nearest'. Определяет вертикальное
выравнивание элемента после прокрутки.'start',
'center', 'end', 'nearest'.
Аналогично для горизонтальной прокрутки.scrollIntoViewИногда требуется управлять прокруткой более гибко, например, с учётом
динамически изменяемой высоты элементов или фиксированных шапок. Для
этого можно использовать функцию onBeforeStart каждого
шага:
const steps = [
{
element: '#dynamic-element',
popover: { title: 'Динамический элемент', description: 'Прокручиваем вручную', position: 'top' },
onBeforeStart: (element) => {
const headerOffset = 80;
const elementPosition = element.getBoundingClientRect().top + window.scrollY;
window.scrollTo({ top: elementPosition - headerOffset, beh * avior: 'smooth' });
}
}
];
Если целевой элемент находится внутри модального окна или скрытого контейнера, Driver.js по умолчанию не сможет корректно прокрутить страницу до него. В таких случаях нужно:
display: block) перед запуском шага.onBeforeStart для принудительного открытия
модального окна:const steps = [
{
element: '#modal-button',
popover: { title: 'Кнопка внутри модального окна', description: 'Сначала откроем окно', position: 'right' },
onBeforeStart: () => document.querySelector('#modal').classList.add('open')
}
];
scrollIntoViewOptions.Driver.js позволяет задавать глобальные настройки прокрутки при инициализации:
const driver = new Driver({
scrollIntoViewOptions: { beh * avior: 'smooth', block: 'center', inline: 'nearest' },
padding: 10
});
driver.defineSteps(steps);
driver.start();
block: 'center', чтобы элемент не прилипал к
верхней границе.inline: 'center'.scrollIntoView на родительских
контейнерах через onBeforeStart.Driver.js позволяет выполнять действия после завершения прокрутки:
const steps = [
{
element: '#after-scroll',
popover: { title: 'После прокрутки', description: 'Выполняем действие', position: 'bottom' },
onNext: () => console.log('Элемент теперь виден и готов к взаимодействию')
}
];
onNext выполняется после отображения поповера и
гарантирует, что элемент уже в видимой области.Правильная настройка этих механизмов обеспечивает стабильную и предсказуемую работу Driver.js даже на сложных и длинных страницах.