Shepherd.js предоставляет гибкий API для управления интерактивными турами по веб-приложению. Одной из важных возможностей является динамическое удаление шагов тура. Это может понадобиться, если определённые элементы интерфейса отсутствуют, пользователь не имеет доступа к части функционала или необходимо изменить порядок шагов на лету.
Для удаления шагов используются методы объекта Tour, создаваемого при инициализации тура:
tour.removeStep(id) — удаляет
конкретный шаг по его идентификатору.step.destroy() — удаляет шаг через
объект шага, предварительно полученный методом
tour.getById(id).tour.steps = [] — полное очищение всех
шагов тура (редко используется, чаще для сброса).Каждому шагу при создании рекомендуется задавать уникальный идентификатор:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true
}
});
tour.addStep({
id: 'intro',
text: 'Добро пожаловать!',
attachTo: { element: '.header', on: 'bottom' }
});
tour.addStep({
id: 'feature',
text: 'Здесь находится важная функция',
attachTo: { element: '.feature-btn', on: 'right' }
});
// Удаление шага по id
tour.removeStep('feature');
При вызове removeStep('feature') шаг с
идентификатором 'feature' полностью удаляется из
внутреннего массива tour.steps, и тур
будет проигрываться без него.
Если есть ссылка на объект шага, можно использовать метод
destroy:
const step = tour.getById('intro');
step.destroy();
После вызова destroy() шаг
автоматически удаляется из туров, и связанные с ним DOM-элементы также
очищаются. Это особенно полезно, когда шаги создаются динамически на
основе условий приложения.
Shepherd.js позволяет удалять шаги даже во время активного тура. При этом важно учитывать:
tour.next() не будет
работать, и тур завершится.Пример динамического удаления шагов в процессе тура:
tour.on('show', (event) => {
const step = event.step;
if (step.id === 'intro' && someCondition) {
tour.removeStep('feature');
}
});
Таким образом, можно изменять маршрут тура в зависимости от действий пользователя или состояния приложения.
Иногда необходимо очистить все шаги и создать их заново:
tour.steps.forEach(step => step.destroy());
// теперь можно добавить новые шаги
tour.addStep({
id: 'new-step',
text: 'Обновлённый шаг',
attachTo: { element: '.new-element', on: 'top' }
});
Такой подход гарантирует полное удаление старых шагов и очистку всех связанных ресурсов.
removeStep или
destroy ссылки на этот объект становятся
недействительными. Попытка вызвать методы удалённого шага приведёт к
ошибке.destroy, что может
быть использовано для логирования или дополнительных действий.id для всех
шагов — это облегчает управление удалением.tour.start(), чтобы избежать
визуальных сбоев.getById,
destroy и
removeStep, чтобы гарантировать корректное
управление памятью и DOM.Удаление шагов в Shepherd.js — мощный инструмент, который позволяет создавать адаптивные и интерактивные пользовательские туры, подстраивающиеся под состояние интерфейса и действия пользователя.