Driver.js — библиотека для создания интерактивных пошаговых руководств на веб-страницах. Одной из ключевых возможностей является управление последовательностью шагов, включая циклическое перемещение, позволяющее пользователю непрерывно переходить от последнего шага к первому и наоборот.
Циклическое перемещение управляется параметром loop в
конфигурации Driver.js. Этот параметр принимает булево значение:
const driver = new Driver({
animate: true,
opacity: 0.7,
padding: 10,
allowClose: true,
loop: true // включает циклическое перемещение
});
При loop: true навигация по шагам становится
бесконечной:
Если loop: false (значение по умолчанию), навигация
останавливается на последнем или первом шаге, и дальнейшее продвижение
невозможно.
Каждый шаг определяется объектом с обязательными и дополнительными параметрами:
driver.defineSteps([
{
element: '#step1',
popover: {
title: 'Первый шаг',
description: 'Описание первого шага',
position: 'bottom'
}
},
{
element: '#step2',
popover: {
title: 'Второй шаг',
description: 'Описание второго шага',
position: 'right'
}
},
{
element: '#step3',
popover: {
title: 'Третий шаг',
description: 'Описание третьего шага',
position: 'left'
}
}
]);
Циклическое перемещение работает независимо от количества шагов. Даже
при добавлении динамических элементов или обновлении DOM, Driver.js
корректно перенаправляет навигацию, если включен loop.
Параметр loop можно менять в процессе выполнения
руководства через метод setOptions:
driver.setOptions({ loop: false });
Это позволяет создавать адаптивные сценарии, где пользователь сначала изучает ключевые шаги в цикле, а затем ограничивается фиксированной последовательностью для завершения задачи.
Driver.js предоставляет ряд событий, полезных для отслеживания циклической навигации:
driver:start — инициируется при старте
руководства.driver:next — вызывается при переходе к следующему
шагу.driver:previous — вызывается при возврате к предыдущему
шагу.driver:finish — вызывается при завершении
руководства.Пример обработки перехода в цикле:
driver.on('driver:next', (step) => {
console.log(`Перешли на шаг: ${step.popover.title}`);
});
driver.on('driver:previous', (step) => {
console.log(`Вернулись на шаг: ${step.popover.title}`);
});
Эти события позволяют интегрировать Driver.js с другими системами аналитики или менять состояние интерфейса в реальном времени.
Циклическое перемещение может включать шаги с элементами, которые динамически появляются и исчезают. Чтобы избежать ошибок:
onNext и onPrevious
для динамической корректировки позиции:driver.defineSteps([
{
element: '#dynamicStep',
popover: {
title: 'Динамический шаг',
description: 'Проверка наличия элемента',
position: 'top'
},
onNext: (element) => {
if (!document.querySelector('#dynamicStep')) {
return false; // пропускаем шаг
}
}
}
]);
animate: true и
задавать duration, чтобы визуально было понятно, что шаги
зациклены.Driver.js позволяет использовать кастомные кнопки в popover, сохраняя циклический эффект:
driver.defineSteps([
{
element: '#stepCustom',
popover: {
title: 'Кастомный шаг',
description: 'С кнопкой "Пропустить"',
buttons: [
{
text: 'Пропустить',
className: 'skip-button',
action: () => driver.moveNext()
}
]
}
}
]);
Циклическая логика loop не нарушается, если пользователь
использует кастомные действия для перехода. При этом метод
driver.moveNext() корректно учитывает последний шаг и
возвращает к первому.
Циклическое перемещение в Driver.js — это мощный инструмент для создания интерактивных и непрерывных руководств, обеспечивающий плавную и адаптивную навигацию между шагами без ограничения последовательности.