Driver.js — это мощная библиотека для создания интерактивных пошаговых руководств в веб-приложениях. Понимание breaking changes критично для поддержки проектов, особенно при обновлении с одной версии библиотеки на другую. Разберём ключевые изменения, которые могут повлиять на существующий код.
Ранее конструктор Driver.js позволял создавать объект без обязательной конфигурации:
const driver = new Driver();
В последних версиях необходимо передавать объект конфигурации, иначе библиотека может вызывать ошибки:
const driver = new Driver({
animate: true,
opacity: 0.75,
padding: 10,
});
Ключевые изменения:
animate теперь по умолчанию
true.opacity изменён с 0.5 на
0.75.padding обязателен для корректного позиционирования
тултипа.defineSteps →
defineStepРанее метод defineSteps принимал массив объектов
шагов:
driver.defineSteps([
{ element: '#btn', popover: { title: 'Кнопка', description: 'Нажмите сюда' } },
{ element: '#menu', popover: { title: 'Меню', description: 'Откройте меню' } },
]);
Теперь метод переименован в defineStep
и требует регистрацию каждого шага отдельно:
driver.defineStep({
element: '#btn',
popover: { title: 'Кнопка', description: 'Нажмите сюда' }
});
driver.defineStep({
element: '#menu',
popover: { title: 'Меню', description: 'Откройте меню' }
});
Это изменение влияет на все проекты, где шаги создавались массивом.
Ранее использовались события:
onNextonPreviousonResetВ новых версиях:
eventDetail вместо отдельного элемента.onReset заменён на onStop:driver.on('next', (eventDetail) => {
console.log(eventDetail.step);
});
driver.on('stop', () => {
console.log('Тур завершён');
});
Это изменение ломает обратные вызовы, если использовать старый синтаксис.
top, bottom,
left, right заменены на
auto, top-start, top-end
и т.д.auto позволяет Driver.js автоматически
определять оптимальное положение.className больше не применяется к тултипу
напрямую.popover: {
title: 'Заголовок',
description: 'Описание',
className: 'custom-popover'
}
ElementNotFoundError.const btn = document.querySelector('#btn');
if (btn) {
driver.defineStep({ element: btn, popover: { title: 'Кнопка' } });
}
allowClose теперь отключает свайпы по
умолчанию.scrollIntoViewOptions: { beh * avior: 'smooth', block: 'center' }
defineSteps,
onReset и старых событий.defineStep.Эти изменения обеспечивают совместимость с новой версией и предотвращают неожиданные ошибки в интерактивных турах.