Shepherd.js с версии 2.x до 10.x претерпела значительные изменения в
архитектуре. Основное отличие заключается в переходе от глобального
объекта Shepherd.Tour и устаревших методов к модульной
структуре с использованием ES6 классов. Теперь каждая
экземплярная переменная тура создается через
new Shepherd.Tour({...}), а шаги добавляются методом
tour.addStep({...}). Это позволяет создавать несколько
независимых туров на одной странице без конфликтов.
Ключевые изменения в конфигурации тура:
defaults теперь задается при
создании тура и влияет на все шаги по умолчанию.Shepherd.Step,
Shepherd.Tether, что обеспечивает большую гибкость
кастомизации.show,
complete, cancel) теперь подписываются через
метод tour.on(event, callback) вместо старого способа с
глобальными слушателями.В версии 10.x шаги имеют унифицированный формат, отличающийся от версии 2.x:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shadow-md bg-purple-dark',
scrollTo: true
}
});
tour.addStep({
id: 'example-step',
text: 'Это новый шаг в версии 10.x',
attachTo: {
element: '.my-element',
on: 'bottom'
},
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Вперед',
action: tour.next
}
]
});
Изменения по сравнению с версией 2.x:
attachTo теперь всегда объект с
element и on. Ранее использовалась строка вида
".my-element bottom".text и action. Методы tour.next()
и tour.back() заменили устаревшие nextStep() и
backStep().classes вместо className.В новой версии события обрабатываются через метод on на
экземпляре тура или шага:
tour.on('start', () => {
console.log('Тур запущен');
});
tour.on('complete', () => {
console.log('Тур завершен');
});
tour.addStep({
id: 'step1',
text: 'Шаг с событием',
buttons: [{ text: 'Далее', action: tour.next }],
}).on('show', () => {
console.log('Шаг отображен');
});
Старый способ через глобальные функции, такие как
Shepherd.on(...), больше не поддерживается.
В версии 2.x кнопки шагов использовали упрощенный массив строк или
объекты с устаревшими методами. В 10.x каждая кнопка — это
объект с обязательными свойствами text и
action:
action — функция, которая принимает контекст шага и
вызывает методы тура (next, back,
complete).{
text: 'Закрыть',
action: () => {
tour.cancel();
console.log('Тур отменен');
}
}
attachToРанее использовался устаревший Tether, теперь Shepherd.js полностью интегрирован с Popper.js для позиционирования.
attachTo всегда объект с element и
on.offset через
{ offset: '0, 10' }.attachTo: {
element: '#btn',
on: 'top',
offset: '0,5'
}
Версия 10.x поддерживает шаги, прикрепленные к элементам, которые появляются динамически после загрузки страницы:
tour.start() теперь корректно ожидает рендер элемента
при использовании scrollTo: true.beforeShowPromise:tour.addStep({
id: 'dynamic-step',
text: 'Элемент появится через 1 секунду',
attachTo: { element: '#dynamic', on: 'bottom' },
beforeShowPromise: () => new Promise(resolve => setTimeout(resolve, 1000))
});
classes) заменяют
устаревший className.popover внутри шага:tour.addStep({
id: 'popover-step',
text: 'Содержимое попапа',
popover: {
title: 'Заголовок',
description: 'Дополнительный текст',
},
buttons: [{ text: 'OK', action: tour.next }]
});
defaultStepOptions задаются на уровне тура.nextStep()
→ next, backStep() → back,
cancelTour() → cancel.attachTo в объект с
element и on.text и action.classes, без использования встроенных тем.beforeShowPromise для
динамических элементов вместо сложных таймеров.tour.on()
и step.on(), удаляется глобальная регистрация.Эти изменения делают Shepherd.js 10.x более модульным, стабильным и совместимым с современными фреймворками и динамическими страницами.