Shepherd.js предоставляет гибкую систему управления фокусом во время проведения пошаговых интерактивных туров по веб-приложению. Фокусировка элементов играет ключевую роль в улучшении пользовательского опыта, так как позволяет пользователю сосредоточиться на конкретных элементах интерфейса, обеспечивая наглядность и понятность инструкций.
Каждый шаг тура в Shepherd.js может автоматически устанавливать фокус
на целевой элемент с помощью параметра attachTo. При этом
используется объект с двумя свойствами:
attachTo: {
element: '#my-element',
on: 'bottom'
}
element — CSS-селектор или DOM-элемент, на который
будет установлен фокус.on — положение тултипа относительно целевого элемента
(top, bottom, left,
right).Когда шаг активен, Shepherd автоматически перемещает фокус на указанный элемент. Это особенно полезно для интерактивных форм, кнопок и ссылок, позволяя пользователю видеть, на что именно нужно обратить внимание.
Shepherd.js позволяет детально контролировать поведение фокуса через параметры шага:
focus — Boolean, определяет, будет ли
элемент получать фокус при активации шага. По умолчанию установлено
значение true.tour.addStep({
id: 'step-1',
text: 'Сначала заполните это поле.',
attachTo: { element: '#input-name', on: 'top' },
focus: true
});
Если значение focus установлено в false,
фокус на элемент не будет перемещаться, что полезно для шагов, не
связанных с конкретным элементом, например, описательных подсказок.
canClickTarget — Boolean, разрешает
пользователю взаимодействовать с целевым элементом во время шага.
Установка true позволяет кликать по кнопкам или ссылкам без
выхода из шага, что важно для интерактивных туров.tour.addStep({
id: 'step-2',
text: 'Нажмите на кнопку, чтобы продолжить.',
attachTo: { element: '#next-button', on: 'bottom' },
focus: true,
canClickTarget: true
});
Иногда требуется более точное управление фокусом, например, для
элементов, появляющихся динамически. Shepherd.js предоставляет метод
beforeShowPromise, который позволяет выполнять действия
перед отображением шага:
tour.addStep({
id: 'step-3',
text: 'Поле динамически появляется здесь.',
attachTo: { element: '#dynamic-input', on: 'right' },
beforeShowPromise: () => {
const el = document.querySelector('#dynamic-input');
if (el) el.focus();
return Promise.resolve();
}
});
Такой подход гарантирует, что фокус будет установлен только после полной загрузки или появления элемента в DOM.
После завершения шага или всего тура важно возвращать фокус к
исходному элементу для сохранения доступности приложения. Shepherd.js
автоматически сохраняет предыдущий фокус, если используется стандартное
поведение шагов. Дополнительно можно управлять возвратом вручную с
помощью события complete или cancel:
tour.on('complete', () => {
const startButton = document.querySelector('#start-tour');
if (startButton) startButton.focus();
});
Shepherd.js интегрирован с ARIA для обеспечения доступности. Каждый
активный шаг получает атрибут aria-describedby, указывающий
на тултип, что позволяет скринридерам правильно озвучивать подсказку.
Управление фокусом совместно с ARIA атрибутами повышает уровень
доступности туров для пользователей с нарушениями зрения.
focus: true обеспечивает перемещение
фокуса и правильное озвучивание шагов.canClickTarget: true предотвращает
прерывание фокусировки при взаимодействии.Комбинация всех параметров позволяет создавать сложные сценарии:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: { beh * avior: 'smooth', block: 'center' }
}
});
tour.addStep({
id: 'step-4',
text: 'Начнем с главного меню.',
attachTo: { element: '#main-menu', on: 'bottom' },
focus: true,
canClickTarget: false,
beforeShowPromise: () => {
console.log('Подготовка к фокусировке на меню');
return Promise.resolve();
}
});
В этом примере обеспечивается плавная прокрутка к элементу, установка фокуса, а также предотвращается взаимодействие с целевым элементом до завершения шага.
Фокус в Shepherd.js — это инструмент, который делает туры
интерактивными, наглядными и доступными. Правильная комбинация
параметров focus, canClickTarget,
beforeShowPromise и событий тура позволяет создавать гибкие
и безопасные для пользователя подсказки.