Передача данных в коллбэках

Библиотека Driver.js предоставляет гибкий механизм создания интерактивных пошаговых руководств по веб-интерфейсу. Одной из ключевых особенностей является возможность передачи данных между различными шагами через коллбэки. Это позволяет динамически управлять поведением шагов, изменять их содержимое и адаптировать последовательность в зависимости от действий пользователя.


Коллбэки и их роль

В Driver.js используются несколько типов коллбэков:

  • onStart – вызывается при запуске всей последовательности шагов.
  • onEnd – вызывается после завершения всех шагов.
  • onNext – срабатывает при переходе к следующему шагу.
  • onPrevious – срабатывает при возврате к предыдущему шагу.
  • onHighlightStarted – вызывается при фокусировке на элементе шага.
  • onReset – срабатывает при сбросе текущего тура.

Коллбэки принимают один объект параметров, содержащий контекст текущего шага и состояния Driver. Через этот объект можно передавать данные между шагами, а также контролировать визуальные элементы.


Передача данных между шагами

Для передачи данных между шагами создается объект состояния, который можно изменять в коллбэках. Пример структуры объекта состояния:

const tourState = {
    userProgress: 0,
    lastClickedElement: null,
    customData: {}
};

Этот объект можно передавать в коллбэки через замыкания:

const driver = new Driver({
    onNext: function (element) {
        tourState.userProgress += 1;
        tourState.lastClickedElement = element;
    },
    onPrevious: function () {
        tourState.userProgress -= 1;
    }
});

driver.defineSteps([
    {
        element: '#step1',
        popover: {
            title: 'Шаг 1',
            description: 'Описание шага 1',
            position: 'bottom'
        }
    },
    {
        element: '#step2',
        popover: {
            title: 'Шаг 2',
            description: 'Описание шага 2',
            position: 'top'
        }
    }
]);

driver.start();

В этом примере объект tourState сохраняет прогресс пользователя и последний выбранный элемент, что позволяет использовать эти данные на следующих шагах.


Динамическое изменение содержимого шагов

С помощью коллбэков можно изменять содержимое поповеров в реальном времени. Например, изменение текста на основе действий пользователя:

driver.defineSteps([
    {
        element: '#step1',
        popover: {
            title: 'Вопрос',
            description: 'Выберите опцию',
            position: 'right'
        },
        onNext: function () {
            const nextStep = driver.getStepByIndex(1);
            nextStep.popover.description = `Вы выбрали: ${tourState.customData.selectedOption}`;
        }
    },
    {
        element: '#step2',
        popover: {
            title: 'Результат',
            description: 'Проверка выбора',
            position: 'left'
        }
    }
]);

Здесь tourState.customData.selectedOption обновляется в предыдущем шаге и используется для динамического описания следующего шага.


Использование коллбэков для условий перехода

Коллбэки могут управлять логикой перехода между шагами. Например, пропуск шагов при определенных условиях:

driver.defineSteps([
    {
        element: '#step1',
        popover: { title: 'Шаг 1', description: 'Начало' },
        onNext: function () {
            if (!tourState.customData.acceptedTerms) {
                driver.moveToNextStep(2); // Пропускаем шаг 2
            }
        }
    },
    {
        element: '#step2',
        popover: { title: 'Шаг 2', description: 'Дополнительный шаг' }
    },
    {
        element: '#step3',
        popover: { title: 'Шаг 3', description: 'Финальный шаг' }
    }
]);

Таким образом, коллбэки дают полный контроль над последовательностью шагов в зависимости от данных, сохраненных в объекте состояния.


Рекомендации по организации передачи данных

  1. Централизованный объект состояния – хранить все данные, которые будут использоваться на разных шагах, в одном объекте, чтобы избежать дублирования.
  2. Изменение только через коллбэки – гарантирует согласованность данных и синхронизацию с визуальными элементами.
  3. Передача параметров через функции – позволяет динамически формировать содержимое шагов.
  4. Минимизация прямых обращений к DOM внутри коллбэков – лучше использовать идентификаторы элементов, передавая их в объект состояния, чтобы избежать конфликтов с другими шагами.

Практические примеры

  • Сохранение выбора пользователя для адаптивного маршрута.
  • Обновление текста и стиля поповеров на основе действий пользователя.
  • Пропуск шагов или добавление новых шагов динамически.
  • Логирование действий пользователя для аналитики или тестирования.

Передача данных через коллбэки в Driver.js обеспечивает гибкость, адаптивность и контроль последовательности шагов, позволяя строить сложные, интерактивные руководства без жесткой привязки к статическому контенту.