Driver.js — это легковесная библиотека для создания интерактивных пошаговых руководств по интерфейсу веб-приложений. Помимо стандартного функционала, Driver.js предоставляет возможность расширять поведение шагов с помощью кастомных методов. Это особенно полезно, когда требуется добавление специфической логики до, во время или после показа шага.
Кастомный метод представляет собой функцию, которая может быть привязана к жизненному циклу шага. Основные жизненные циклы, поддерживаемые Driver.js:
onNext — вызывается при переходе к следующему шагуonPrevious — вызывается при возврате к предыдущему
шагуonStart — вызывается при запуске всего тураonEnd — вызывается после завершения тураonHighlightStarted — вызывается, когда элемент
подсвеченonHighlighted — вызывается после завершения анимации
подсветкиПример добавления кастомного метода в шаг:
const driver = new Driver();
driver.defineSteps([
{
element: '#menuButton',
popover: {
title: 'Меню',
description: 'Кнопка открывает главное меню.'
},
onNext: function() {
console.log('Переход к следующему шагу выполнен.');
}
}
]);
driver.start();
В данном примере при клике на кнопку Next будет вызвана функция
onNext, которая выполнит кастомный код.
defineMethodDriver.js позволяет создавать собственные методы, которые можно
использовать для всех шагов, а не только для одного. Это делается через
метод Driver.defineMethod. Стандартный синтаксис:
Driver.defineMethod('myCustomAction', function(step) {
// step — объект текущего шага
console.log(`Выполняется кастомный метод для элемента: ${step.element}`);
});
После определения метода его можно вызывать в параметрах шагов:
driver.defineSteps([
{
element: '#searchInput',
popover: {
title: 'Поиск',
description: 'Введите текст для поиска.'
},
myCustomAction: function(step) {
step.element.style.border = '2px solid red';
}
}
]);
Ключевой момент: step.element всегда указывает на
DOM-элемент, к которому привязан текущий шаг. Это позволяет динамически
изменять его стиль, атрибуты или содержимое.
Кастомные методы могут принимать аргументы для более гибкого поведения:
Driver.defineMethod('highlightWithColor', function(step, color) {
step.element.style.backgroundColor = color;
});
// Использование метода с аргументом
driver.defineSteps([
{
element: '#profilePic',
popover: {
title: 'Аватар',
description: 'Ваш профильный аватар.'
},
highlightWithColor: 'yellow'
}
]);
В этом случае метод highlightWithColor применит желтую
подсветку к элементу шага.
Кастомные методы могут работать с асинхронным кодом, что полезно для
выполнения запросов или анимаций перед переходом к следующему шагу. Для
этого метод должен возвращать Promise:
Driver.defineMethod('fetchDataBeforeNext', function(step) {
return fetch('/api/data')
.then(response => response.json())
.then(data => {
console.log('Данные получены:', data);
});
});
driver.defineSteps([
{
element: '#loadButton',
popover: {
title: 'Загрузка данных',
description: 'Данные будут загружены перед следующим шагом.'
},
onNext: function(step) {
return driver.fetchDataBeforeNext(step);
}
}
]);
Driver.js дождется выполнения промиса, прежде чем перейти к следующему шагу.
Кастомные методы можно использовать совместно с глобальными событиями Driver.js:
driver.on('start', callback) — запуск тураdriver.on('end', callback) — завершение тураdriver.on('highlight', callback) — подсветка
элементаПример:
driver.on('highlight', step => {
if(step.element.id === 'specialButton') {
driver.customGlowEffect(step.element);
}
});
Здесь customGlowEffect — это ранее определенный
кастомный метод.
try/catch для предотвращения остановки
тура из-за исключений.if (step.element)).Driver.defineMethod, чтобы их можно было использовать в
разных турах.Driver.defineMethod('pulseHighlight', function(step) {
step.element.classList.add('pulse-animation');
});
Driver.defineMethod('scrollToStep', function(step) {
step.element.scrollIntoView({ beh * avior: 'smooth', block: 'center' });
});
Driver.defineMethod('updatePopoverContent', function(step, content) {
step.popover.description = content;
driver.refreshStep(step);
});
Использование кастомных методов делает Driver.js гибкой платформой для интерактивных интерфейсов, позволяя создавать сложные и динамичные туры, полностью адаптированные под особенности веб-приложения.