В библиотеке Driver.js условные туры позволяют динамически изменять последовательность шагов в зависимости от состояния приложения или действий пользователя. Это особенно полезно для адаптивных интерфейсов, где не все элементы всегда присутствуют на странице или их видимость зависит от предыдущих взаимодействий.
Условный тур строится на использовании функций проверки
условий для каждого шага. Каждый шаг может содержать ключ
condition, который определяет, должен ли этот шаг
отображаться в текущем сеансе.
const driver = new Driver();
const steps = [
{
element: '#step1',
popover: {
title: 'Шаг 1',
description: 'Описание шага 1'
},
condition: () => document.querySelector('#step1') !== null
},
{
element: '#step2',
popover: {
title: 'Шаг 2',
description: 'Описание шага 2'
},
condition: () => user.isLoggedIn
}
];
driver.defineSteps(steps);
driver.start();
В этом примере первый шаг отображается только если элемент с
id="step1" существует на странице, а второй шаг зависит от
состояния пользователя.
Для более сложных сценариев можно использовать функции с параметрами, которые анализируют состояние приложения:
function checkFeatureAvailability(featureId) {
return () => features[featureId] === true;
}
const steps = [
{
element: '#featureA',
popover: {
title: 'Функция A',
description: 'Описание функции A'
},
condition: checkFeatureAvailability('featureA')
},
{
element: '#featureB',
popover: {
title: 'Функция B',
description: 'Описание функции B'
},
condition: checkFeatureAvailability('featureB')
}
];
Такой подход позволяет массив шагов оставаться неизменным, при этом реально отображаемые шаги подстраиваются под текущие возможности интерфейса.
Driver.js поддерживает динамическое завершение тура,
если условие для всех оставшихся шагов не выполняется. Для этого
используется метод canProceed или проверка условия перед
вызовом next:
driver.on('next', (step) => {
if (!step.condition()) {
driver.moveNext();
}
});
Таким образом, тур не зависает на невидимых элементах и автоматически пропускает шаги, которые не удовлетворяют условиям.
Условные туры можно сочетать с обработчиками событий, что позволяет строить интерактивные сценарии:
const steps = [
{
element: '#loginButton',
popover: { title: 'Вход', description: 'Нажмите, чтобы войти' },
condition: () => !user.isLoggedIn,
onNext: () => {
waitForLogin().then(() => driver.moveNext());
}
},
{
element: '#dashboard',
popover: { title: 'Панель управления', description: 'Ваши данные' },
condition: () => user.isLoggedIn
}
];
В этом примере второй шаг появляется только после успешного входа пользователя, а первый шаг управляется асинхронным событием.
Для крупных проектов рекомендуется:
Выносить условия в отдельный модуль Это улучшает читаемость и позволяет повторно использовать одну и ту же проверку для разных туров.
Использовать карты шагов по состоянию Например, создать объект, где ключи — это состояния интерфейса, а значения — массивы шагов.
const toursMap = {
guest: guestSteps,
loggedIn: loggedInSteps,
admin: adminSteps
};Ленивая инициализация шагов Если DOM-элементы загружаются динамически, шаги можно создавать непосредственно перед запуском тура.
onNext и onPrevious
для адаптивного поведения: позволяет добавлять асинхронные
действия между шагами.Условные туры в Driver.js превращают статичные walkthrough в интерактивные и адаптивные маршруты, которые учитывают динамический интерфейс и поведение пользователя.