Механизм обработки фокуса в AutoNumeric основан на перехвате
стандартных DOM-событий focus, blur,
focusin, focusout и синхронизации
отображаемого значения с внутренним числовым состоянием. При активации
поля ввода библиотека может переключать представление числа между
«человеческим» форматом (разделители тысяч, символы валют, фиксированное
количество знаков после запятой) и «редактируемым» видом, где
пользователь работает с более «сырыми» данными.
Фокусировка рассматривается не только как событие UI, но и как триггер для изменения визуальной структуры значения, поведения курсора и CSS-состояния элемента.
При получении фокуса на input, управляемом AutoNumeric, выполняется последовательность действий:
При потере фокуса происходит обратная операция:
Основной способ визуального выделения активного поля — использование
стандартного псевдокласса :focus, однако в контексте
AutoNumeric это поведение часто дополняется классами состояния,
добавляемыми программно.
input:focus {
outline: none;
border-color: #3b82f6;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.25);
}
Такой подход работает независимо от библиотеки, но не учитывает момент переключения формата числа.
AutoNumeric поддерживает работу с классами состояния через конфигурацию и DOM-события. На практике часто используется паттерн добавления класса при фокусе и удаления при blur.
Пример логики:
const input = document.querySelector('#amount');
input.addEventListener('focus', () => {
input.classList.add('is-focused');
});
input.addEventListener('blur', () => {
input.classList.remove('is-focused');
});
CSS:
input.is-focused {
border-color: #22c55e;
background-color: #f0fdf4;
}
Такой подход позволяет отделить визуальную логику от встроенного поведения библиотеки.
Одна из ключевых особенностей AutoNumeric заключается в том, что формат числа может изменяться именно в момент фокуса. Это особенно заметно при использовании:
До фокуса:
1,234,567.89 €
При фокусе (упрощённый режим редактирования):
1234567.89
После blur:
1,234,567.89 €
Такое поведение снижает вероятность ошибок при редактировании больших чисел, но требует аккуратной стилизации состояния, чтобы пользователь понимал момент переключения формата.
В AutoNumeric поведение при фокусе регулируется набором опций, которые влияют на форматирование и отображение данных.
unformatOnFocusОпция управляет тем, будет ли значение преобразовано в «чистый» вид при активации поля.
new AutoNumeric('#amount', {
unformatOnFocus: true
});
При включении:
showOnlyNumbersOnFocusПозволяет отображать только числовую часть без символов валют и дополнительных украшений.
Поведение:
€ 12.500,0012500,00selectOnFocusОпция управляет выделением значения при активации поля.
new AutoNumeric('#amount', {
selectOnFocus: true
});
Это влияет на UX редактирования, особенно при быстром вводе новых значений.
caretPositionOnFocusРегулирует позицию курсора при активации поля:
new AutoNumeric('#amount', {
caretPositionOnFocus: "end"
});
AutoNumeric использует внутренние обработчики событий для синхронизации состояния:
onFocusonBluronFocusInonFocusOutЭти события позволяют подключать кастомную логику форматирования.
Пример:
new AutoNumeric('#amount', {
onFocus: (event) => {
event.target.style.backgroundColor = '#fff7ed';
},
onBlur: (event) => {
event.target.style.backgroundColor = '';
}
});
При смене локали или правил форматирования поведение фокуса становится критическим элементом UX. В AutoNumeric локали определяют:
При фокусе временное упрощение часто игнорирует локаль, чтобы обеспечить единообразный ввод.
Расширенная стилизация реализуется через callback-функции, где можно вручную управлять состоянием элемента.
Пример добавления классов:
new AutoNumeric('#amount', {
onFocus: (event) => {
event.target.classList.add('editing');
},
onBlur: (event) => {
event.target.classList.remove('editing');
}
});
CSS:
input.editing {
letter-spacing: 0.5px;
font-weight: 500;
}
Такой подход часто используется в финансовых интерфейсах, где визуальное состояние должно сигнализировать режим редактирования.
При работе с AutoNumeric важно учитывать кратковременные переходы между форматами. В момент фокуса могут происходить:
Для предотвращения «мигания» интерфейса применяются:
input {
transition: border-color 0.15s ease, box-shadow 0.15s ease;
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
В формах с несколькими числовыми полями AutoNumeric важно учитывать синхронизацию состояния:
Часто применяется централизованный обработчик:
document.addEventListener('focusin', (e) => {
document.querySelectorAll('.is-focused')
.forEach(el => el.classList.remove('is-focused'));
e.target.classList.add('is-focused');
});
При интенсивном использовании большого количества input-полей с активным форматированием AutoNumeric может увеличивать нагрузку из-за:
Оптимизация достигается за счёт: