Метод movePrevious используется для перехода к
предыдущему шагу интерактивного тура. Он является частью API экземпляра
Driver и обеспечивает управление навигацией между шагами, позволяя
реализовать гибкое поведение пользовательского сценария.
Driver.js строит последовательность шагов (steps), каждый из которых описывает:
Навигация между шагами осуществляется с помощью методов:
moveNext() — переход к следующему шагуmovePrevious() — переход к предыдущему шагуmoveTo(index) — переход к произвольному шагуreset() — завершение тураmovePrevious играет ключевую роль в обратной навигации и
используется как внутри встроенных контролов, так и программно.
driver.movePrevious();
Метод не принимает аргументов и работает с текущим состоянием экземпляра Driver.
При вызове movePrevious происходит:
Определение текущего шага (current step index)
Проверка, существует ли предыдущий шаг
Уменьшение индекса на единицу
Отрисовка предыдущего шага:
Если текущий шаг — первый, поведение зависит от конфигурации (по умолчанию переход не выполняется).
const driver = new Driver({
steps: [
{ element: '#step1', popover: { title: 'Шаг 1', description: 'Описание 1' }},
{ element: '#step2', popover: { title: 'Шаг 2', description: 'Описание 2' }},
{ element: '#step3', popover: { title: 'Шаг 3', description: 'Описание 3' }}
]
});
// запуск тура
driver.start();
// переход назад
driver.movePrevious();
movePrevious часто связывается с кастомными кнопками
интерфейса:
document.querySelector('#prevBtn').addEventListener('click', () => {
driver.movePrevious();
});
Это позволяет полностью контролировать UX, заменяя стандартные кнопки Driver.js.
Если текущий шаг имеет индекс 0, вызов
movePrevious():
Для обработки этого случая можно использовать проверку:
if (driver.getCurrentStepIndex() > 0) {
driver.movePrevious();
}
Driver.js предоставляет хуки жизненного цикла, которые можно
использовать совместно с movePrevious:
const driver = new Driver({
onPrevious: (element, step) => {
console.log('Переход к предыдущему шагу:', step);
}
});
При вызове movePrevious:
onPreviousМетод работает синхронно, но визуальные изменения могут зависеть от:
При необходимости синхронизации логики:
driver.movePrevious();
// дополнительная логика после перехода
setTimeout(() => {
// действия после обновления UI
}, 300);
Если шаги изменяются во время выполнения:
driver.defineSteps(newSteps);
movePrevious будет учитывать обновлённый массив шагов.
Однако важно:
1. Вызов без инициализации
const driver = new Driver();
driver.movePrevious(); // нет шагов
Результат: отсутствие эффекта
2. Вызов до start()
driver.movePrevious();
Driver ещё не знает текущий шаг — переход невозможен
3. Нарушение порядка шагов
Если шаги задаются некорректно (например, пустой массив), метод не сможет выполнить переход
Можно изменить поведение кнопки “Назад” через настройки popover:
const driver = new Driver({
showButtons: true,
nextBtnText: 'Далее',
prevBtnText: 'Назад'
});
Driver автоматически привязывает movePrevious к кнопке
“Назад”.
При необходимости загрузки данных перед переходом:
async function goBack() {
await fetch('/api/data');
driver.movePrevious();
}
Это позволяет контролировать последовательность действий.
moveNextmovePrevious и moveNext образуют
двунаправленную навигацию:
// вперёд
driver.moveNext();
// назад
driver.movePrevious();
Оба метода используют один и тот же внутренний механизм управления индексом.
Driver хранит текущий индекс шага:
const index = driver.getCurrentStepIndex();
После вызова:
driver.movePrevious();
значение уменьшается:
index - 1
Для предотвращения возврата:
const driver = new Driver({
allowClose: false,
keyboardControl: false
});
Или вручную:
document.querySelector('#prevBtn').disabled = true;
const driver = new Driver({
steps: [
{ element: '#menu', popover: { title: 'Меню' }},
{ element: '#profile', popover: { title: 'Профиль' }},
{ element: '#settings', popover: { title: 'Настройки' }}
]
});
driver.start();
// кастомная логика
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowLeft') {
driver.movePrevious();
}
});
Упрощённая логика работы метода:
movePrevious() {
if (this.currentStepIndex > 0) {
this.currentStepIndex--;
this.highlightStep(this.currentStepIndex);
}
}
Метод movePrevious:
Особенно важен в сложных интерфейсах, где шаги не всегда воспринимаются с первого раза.
При включённом keyboardControl:
←) может быть связана с
movePreviousОграничение возврата на определённые шаги:
if (driver.getCurrentStepIndex() !== 1) {
driver.movePrevious();
}
Логирование переходов:
const original = driver.movePrevious;
driver.movePrevious = function() {
console.log('Назад');
original.call(driver);
};
Интеграция с состоянием приложения:
driver.movePrevious();
appState.currentStep--;
start)moveNext,
movePrevious)Метод movePrevious является базовым инструментом
навигации, обеспечивающим полноценный контроль над последовательностью
шагов и пользовательским опытом.