Bliss.js предоставляет удобный и лаконичный интерфейс для работы с DOM, включая управление фокусом на элементах. Работа с фокусом критична для создания интерактивных форм, динамических интерфейсов и доступных веб-приложений.
Для установки фокуса на элемент используется метод
focus():
// Выбираем элемент с id="inputField" и устанавливаем на него фокус
bliss('#inputField').focus();
Метод bliss() возвращает объект, обернутый Bliss.js, что
позволяет вызывать на нем методы управления DOM напрямую.
focus() можно применять как к одиночным элементам, так и к
коллекциям:
bliss('input').forEach(el => el.focus());
Bliss.js упрощает проверку, находится ли элемент в фокусе:
const input = bliss('#inputField');
if (input.is(':focus')) {
console.log('Элемент в фокусе');
}
Метод is() принимает CSS-селектор, включая псевдокласс
:focus, возвращая логическое значение.
Bliss.js обеспечивает удобную работу с событиями focus и
blur. Можно использовать метод on() для
привязки обработчиков:
bliss('#inputField').on('focus', () => {
console.log('Фокус установлен');
});
bliss('#inputField').on('blur', () => {
console.log('Фокус потерян');
});
Для динамически создаваемых элементов применим делегированный подход через родительский контейнер:
bliss('#formContainer').on('focus', 'input', (event) => {
console.log(`Фокус на элементе: ${event.target.name}`);
});
С помощью Bliss.js можно управлять последовательностью перехода
фокуса с клавиатуры. Атрибут tabindex используется для
определения порядка:
bliss('#firstInput').attr('tabindex', 1);
bliss('#secondInput').attr('tabindex', 2);
bliss('#thirdInput').attr('tabindex', 3);
Значение 0 возвращает элемент в естественный порядок
документа, отрицательное значение исключает элемент из цикла
табуляции.
Bliss.js позволяет программно переключать фокус между элементами. Часто используется при валидации форм или динамическом создании элементов:
function moveFocusToNext(currentSelector, nextSelector) {
const current = bliss(currentSelector);
const next = bliss(nextSelector);
if (current.is(':focus')) {
next.focus();
}
}
moveFocusToNext('#input1', '#input2');
Можно создавать цепочки перехода между полями:
const inputs = bliss('input');
inputs.forEach((el, i) => {
el.on('keydown', (e) => {
if (e.key === 'Enter' && inputs[i + 1]) {
inputs[i + 1].focus();
}
});
});
Bliss.js интегрируется с классами CSS для динамического выделения элементов в фокусе:
bliss('input').on('focus', (el) => el.addClass('focused'));
bliss('input').on('blur', (el) => el.removeClass('focused'));
Использование классов позволяет отделять визуальные эффекты от логики, улучшая поддержку и читаемость кода.
При работе с модальными окнами важно блокировать фокус на элементах вне модального контейнера. Bliss.js упрощает установку начального и конечного фокуса:
const modal = bliss('#modal');
modal.show();
modal.find('input:first').focus();
modal.on('keydown', (e) => {
if (e.key === 'Tab') {
const focusable = modal.find('input, button, select, textarea');
const first = focusable[0];
const last = focusable[focusable.length - 1];
if (e.shiftKey && document.activeElement === first) {
e.preventDefault();
last.focus();
} else if (!e.shiftKey && document.activeElement === last) {
e.preventDefault();
first.focus();
}
}
});
Этот подход обеспечивает доступность интерфейса и предотвращает уход фокуса за пределы модального окна.
Bliss.js предоставляет следующие ключевые инструменты для работы с фокусом:
focus() и blur() для управления состоянием
фокуса.is(':focus').focus и blur через
on().Эти возможности делают управление фокусом гибким, простым в коде и совместимым с современными стандартами веб-доступности.