Shepherd.js — это современная библиотека для создания интерактивных туров по веб-приложению. Тур по форме позволяет пошагово проводить пользователя через все элементы интерфейса, объясняя назначение полей, кнопок и опций. При работе с формами важно учитывать динамические элементы, валидацию и фокусировку на нужных компонентах.
Первым шагом является создание экземпляра тура. Он управляет последовательностью шагов, глобальными настройками и поведением при навигации.
import Shepherd from 'shepherd.js';
import 'shepherd.js/dist/css/shepherd.css';
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: { beh * avior: 'smooth', block: 'center' },
cancelIcon: { enabled: true },
classes: 'shepherd-theme-arrows'
},
useModalOverlay: true
});
Ключевые моменты и настройки:
scrollTo — плавная прокрутка к элементу при открытии
шага.cancelIcon — позволяет закрыть тур в любой момент.classes — подключение темы для визуального
оформления.useModalOverlay — затемнение фона, чтобы фокус
оставался на форме.Шаги тура привязываются к конкретным элементам формы с помощью селекторов. Каждый шаг может содержать заголовок, текстовое описание и кнопки навигации.
tour.addStep({
id: 'username-step',
text: 'Введите ваш логин в это поле. Логин должен быть уникальным.',
attachTo: { element: '#username', on: 'bottom' },
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Далее',
action: tour.next
}
]
});
tour.addStep({
id: 'password-step',
text: 'Введите пароль. Минимальная длина — 8 символов.',
attachTo: { element: '#password', on: 'bottom' },
buttons: [
{ text: 'Назад', action: tour.back },
{ text: 'Далее', action: tour.next }
]
});
tour.addStep({
id: 'submit-step',
text: 'Нажмите кнопку, чтобы отправить форму.',
attachTo: { element: '#submit-btn', on: 'top' },
buttons: [
{ text: 'Назад', action: tour.back },
{ text: 'Завершить', action: tour.complete }
]
});
Особенности работы с формами:
attachTo обеспечивает правильное
позиционирование подсказки относительно поля.В современных приложениях поля могут появляться или исчезать в зависимости от пользовательского ввода. Для корректного отображения тура необходимо учитывать асинхронность и изменяемость DOM.
const passwordStep = tour.addStep({
id: 'password-step',
text: 'Введите пароль.',
attachTo: { element: '#password', on: 'bottom' },
buttons: [
{ text: 'Назад', action: tour.back },
{ text: 'Далее', action: () => {
const password = document.querySelector('#password').value;
if (password.length < 8) {
alert('Пароль слишком короткий');
} else {
tour.next();
}
}
}
]
});
Важные моменты:
step.updateStepOptions().tour.show('step-id') позволяет начать тур с любого
места.useModalOverlay: true помогает концентрировать внимание на
форме.show, hide, complete), которые
позволяют интегрировать тур с логикой приложения.tour.on('complete', () => {
console.log('Тур завершен');
});
tour.on('show', (event) => {
console.log(`Показан шаг: ${event.step.id}`);
});
useModalOverlay.tour.on('show', (event) => {
const el = event.step.options.attachTo.element;
el.classList.add('highlighted-field');
});
tour.on('hide', (event) => {
const el = event.step.options.attachTo.element;
el.classList.remove('highlighted-field');
});
Эта техника помогает визуально акцентировать внимание на активном поле формы.
В Vue.js, React или Angular важно учитывать, что DOM может быть обновлен после рендеринга компонента. Для корректной работы тура:
nextTick или useEffect для
гарантии наличия элементов.attachTo.tour.start(); // Запуск тура после инициализации
Тур начнет с первого шага, плавно прокручивая к каждому полю формы, показывая подсказки и контролируя действия пользователя. Кастомизация шагов и кнопок обеспечивает точное соответствие логике приложения и требованиям UX.