modifyValueOnWheel

Параметр modifyValueOnWheel в библиотеке AutoNumeric управляет тем, будет ли значение числового поля изменяться при использовании колесика мыши, когда фокус находится на элементе ввода. Этот механизм напрямую влияет на пользовательский опыт ввода чисел, особенно в интерфейсах с инкрементальными значениями, финансовыми формами, параметрическими настройками и административными панелями.


Базовая логика работы колесика мыши

В стандартном HTML-поведении событие wheel может быть использовано для изменения значения input[type="number"], однако поведение по умолчанию нестабильно между браузерами и часто конфликтует с пользовательским ожиданием точного ввода.

AutoNumeric перехватывает событие прокрутки и, в зависимости от настройки modifyValueOnWheel, либо:

  • изменяет текущее значение с учётом шага (step, decimalPlaces, minimumValue, maximumValue)
  • игнорирует событие полностью, оставляя значение неизменным

Тип параметра и допустимые значения

Параметр modifyValueOnWheel является логическим флагом:

  • true — включить изменение значения колесом мыши
  • false — отключить изменение значения колесом мыши

Поведение при modifyValueOnWheel: true

При включённом режиме AutoNumeric активирует обработчик wheel, который:

  1. Определяет направление прокрутки:

    • прокрутка вверх увеличивает значение
    • прокрутка вниз уменьшает значение
  2. Применяет шаг изменения:

    • используется стандартный шаг (обычно 1 или 0.01 в зависимости от конфигурации)
    • учитывается количество знаков после запятой
  3. Учитывает ограничения:

    • minimumValue — нижняя граница
    • maximumValue — верхняя граница
  4. Применяет форматирование:

    • разделители тысяч
    • округление
    • правила отображения отрицательных значений

Пример конфигурации:

AutoNumeric.create('#price', {
    modifyValueOnWheel: true,
    minimumValue: '0',
    maximumValue: '10000',
    decimalPlaces: 2
});

При такой настройке поле становится интерактивным регулятором числового значения, что удобно для параметров типа «цена», «количество», «процент».


Поведение при modifyValueOnWheel: false

При отключении:

  • событие wheel блокируется или игнорируется
  • значение остаётся неизменным вне зависимости от прокрутки
  • прокрутка страницы или контейнера может продолжаться (в зависимости от wheel-поведения браузера и других обработчиков)

Это особенно важно для полей ввода внутри прокручиваемых интерфейсов, где случайное изменение значения недопустимо.


Влияние на UX и типовые сценарии

Инкрементальные поля

В интерфейсах настройки параметров (например, количество товаров, процент скидки) включение modifyValueOnWheel делает ввод быстрее:

  • уменьшает необходимость использования стрелок
  • ускоряет изменение значений
  • повышает точность при небольших шагах

Финансовые формы

В денежных полях поведение колесика часто нежелательно:

  • случайная прокрутка может изменить сумму
  • пользователь может не заметить изменение
  • повышается риск ошибок

В таких случаях параметр обычно отключается.

Административные панели

В системах управления конфигурацией используется смешанный подход:

  • включено для числовых регуляторов
  • отключено для критических значений (лимиты, пороги)

Взаимодействие с другими параметрами AutoNumeric

step и шаг изменения

Хотя AutoNumeric не всегда использует классический HTML step, логика изменения при прокрутке может быть связана с:

  • количеством десятичных знаков
  • текущей точностью значения
  • внутренними правилами округления

minimumValue и maximumValue

При достижении границ:

  • дальнейшее увеличение игнорируется
  • дальнейшее уменьшение блокируется
  • значение «залипает» на границе диапазона

wheelStep (если используется кастомная логика)

В некоторых конфигурациях или расширениях логика шага при прокрутке может быть переопределена, что позволяет:

  • задавать отдельный шаг для колесика
  • отличать его от клавиатурного инкремента

Особенности работы в разных браузерах

Обработка события wheel имеет различия:

  • Chrome и Edge: стабильное поведение, предсказуемая дискретность
  • Firefox: может учитывать системные настройки чувствительности мыши
  • Safari: иногда требуется дополнительная блокировка дефолтного поведения

AutoNumeric нормализует эти различия, обеспечивая единый слой логики поверх нативного события.


Конфликты с прокруткой страницы

Один из ключевых аспектов modifyValueOnWheel — взаимодействие с вертикальной прокруткой:

  • при фокусе на input прокрутка может изменять значение вместо страницы
  • при отключении параметра прокрутка страницы восстанавливается
  • возможны конфликты в модальных окнах и таблицах

В сложных интерфейсах часто применяется дополнительная логика:

  • блокировка event.preventDefault() только при активном поле
  • включение изменения только при удержании модификатора (Shift, Ctrl)

Поведение при потере фокуса

Изменение значения колесиком применяется только когда:

  • элемент находится в фокусе
  • поле активно и не disabled/readOnly
  • отсутствуют блокирующие конфигурации

После потери фокуса колесо мыши не влияет на значение.


Пример сложной конфигурации

AutoNumeric.create('#quantity', {
    modifyValueOnWheel: true,
    minimumValue: '1',
    maximumValue: '999',
    decimalPlaces: 0,
    unformatOnHover: false
});

Такая настройка превращает поле в управляемый числовой регулятор, где колесико мыши становится основным способом быстрого изменения значения.


Типичные ошибки при использовании

  • включение параметра в полях с высокой точностью (например, валюты с 4–6 знаками)
  • отсутствие ограничения maximumValue, приводящее к бесконтрольному росту
  • использование в контейнерах с активной прокруткой без UX-защиты
  • ожидание стандартного HTML-шага step, который не всегда совпадает с логикой AutoNumeric

Рекомендации по архитектуре поведения

Логика modifyValueOnWheel обычно рассматривается как часть более широкой модели взаимодействия:

  • для форм ввода данных высокой важности — отключается
  • для параметров настройки интерфейса — включается
  • для числовых контроллеров — используется как основной механизм инкрементации

При проектировании интерфейса важно учитывать, что колесо мыши является неявным способом изменения значения, и его использование должно быть предсказуемым и контролируемым.