Метод hasNextStep в библиотеке Driver.js используется
для определения наличия следующего шага в текущем туре. Это
вспомогательный инструмент управления навигацией, позволяющий точно
контролировать поведение интерфейса при переходе между шагами.
Метод возвращает логическое значение:
true — если следующий шаг существуетfalse — если текущий шаг является последнимВ рамках пошагового тура Driver.js каждый шаг описывается объектом конфигурации. Управление переходами может происходить автоматически (через встроенные кнопки) или вручную — через пользовательскую логику.
hasNextStep особенно важен при:
driver.hasNextStep()
Метод вызывается у экземпляра driver.
const driver = new Driver({
steps: [
{ element: '#step1', popover: { title: 'Шаг 1' } },
{ element: '#step2', popover: { title: 'Шаг 2' } }
]
});
if (driver.hasNextStep()) {
console.log('Следующий шаг доступен');
} else {
console.log('Это последний шаг');
}
Driver.js позволяет переопределять элементы управления. В этом случае
hasNextStep помогает адаптировать поведение кнопки
«Далее».
const driver = new Driver({
steps: [...],
popoverClass: 'custom-popover',
nextBtnText: 'Далее',
doneBtnText: 'Завершить',
onNextClick: () => {
if (driver.hasNextStep()) {
driver.moveNext();
} else {
driver.reset();
}
}
});
Здесь:
moveNext()reset()На основе hasNextStep можно менять интерфейс прямо во
время выполнения:
const updateButtonText = () => {
const nextButton = document.querySelector('.driver-next-btn');
if (driver.hasNextStep()) {
nextButton.textContent = 'Далее';
} else {
nextButton.textContent = 'Готово';
}
};
driver.on('highlighted', updateButtonText);
Такой подход улучшает UX, делая поведение интерфейса более предсказуемым.
hasNextStep часто используется внутри событий:
driver.on('next', () => {
if (!driver.hasNextStep()) {
console.log('Достигнут последний шаг');
}
});
Это позволяет:
hasNextStep обычно применяется вместе с:
moveNext() — переход к следующему шагуmovePrevious() — возврат назадisLastStep() — альтернативная проверка (если доступна в
версии)getActiveIndex() — получение текущего индексаПример комбинирования:
if (driver.hasNextStep()) {
driver.moveNext();
} else {
console.log('Конец тура');
}
1. Завершение тура с подтверждением
if (!driver.hasNextStep()) {
if (confirm('Завершить обучение?')) {
driver.reset();
}
}
2. Логирование шагов
driver.on('next', () => {
if (driver.hasNextStep()) {
console.log('Переход к следующему шагу');
} else {
console.log('Финальный шаг');
}
});
3. Условная загрузка данных
if (!driver.hasNextStep()) {
fetch('/api/complete-tour', { method: 'POST' });
}
Driver.js хранит массив шагов и текущий индекс. Метод
hasNextStep фактически проверяет:
currentIndex < steps.length - 1
Это означает:
Ошибка: вызов до старта тура
driver.hasNextStep(); // может вернуть некорректный результат
Решение — вызывать после driver.start().
Ошибка: игнорирование асинхронных изменений
Если шаги изменяются динамически, необходимо учитывать момент обновления состояния.
В сложных интерфейсах hasNextStep может использоваться
как часть управляющего слоя:
function handleNext() {
if (driver.hasNextStep()) {
driver.moveNext();
} else {
completeOnboarding();
}
}
Где completeOnboarding — функция завершения
пользовательского сценария.
hasNextStep не управляет переходами напрямую, а
выступает как индикатор состояния, позволяющий:
| Ситуация | Результат |
|---|---|
| Первый шаг | true (если >1 шага) |
| Последний шаг | false |
| Один шаг в туре | false |
| Тур не запущен | зависит от реализации |
В React:
const handleNext = () => {
if (driver.hasNextStep()) {
driver.moveNext();
} else {
setTourFinished(true);
}
};
В Vue:
methods: {
nextStep() {
if (this.driver.hasNextStep()) {
this.driver.moveNext();
} else {
this.finishTour();
}
}
}
Метод становится особенно важным при создании сложных обучающих интерфейсов, где стандартного поведения Driver.js недостаточно.