1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/biabia123456-custom-number-input-keyboard

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 4.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 28.02.2025 00:50 e512e55

custom-input

Базируется на Vant-NumberKeyboard — пользовательский цифровой ввод с клавиатурой.

Обстоятельства возникновения проблемы

  1. В мобильных проектах требуется цифровой ввод. Установка атрибута type=number в стандартном <input> вызывает системную клавиатуру, но при этом атрибуты minlength, maxlength становятся недействительными, а также невозможно запрещать ввод некоторых специальных символов.
  2. Использование событий change или input для проверки значений в JavaScript приводит к эффекту мигания внутри поля ввода, а курсор автоматически перемещается в конец (можно контролировать курсор, но это плохо влияет на совместимость).
  3. На iOS можно использовать событие keypress для предварительной проверки ввода, но Android его не поддерживает, поэтому пришлось реализовать цифровое поле ввода самостоятельно.

Пример работы

image

Принцип имитации курсора

image

.cursor {
  position: relative;
  height: 35px;
  &::after {
    content: "";
    animation: blink 1s infinite steps(1, start);
    position: absolute;
    width: 2px;
    height: 30px;
    right: 0;
    top: 2.5px;
    background: rgb(0, 53, 237);
    border-radius: 2px;
  }
}
@keyframes blink {
  0%, 100% {
    background: transparent;
  }
  50% {
    background: rgb(0, 53, 237);
  }
}

Использование компонента

Импортировать компонент в main.js.

import customInput from "./components/customInput";
Vue.use(customInput);

Теперь вы можете использовать custom-input в ваших страницах:

<template>
  <custom-input
    v-model="inputMoney"
    placeholder="Максимальное значение 888.88, округление до трёх знаков после запятой"
    max="888.88"
    :toFixed="3"
  ></custom-input>
</template>
<script>
  export default {
    data() {
      return {
        inputMoney: "",
      };
    },
  };
</script>
Атрибут Описание Тип По умолчанию
value Текущее значение ввода String -
placeholder Значение плейсхолдера String "placeholder"
transform Проверяет, находится ли поле ввода под клавиатурой Boolean true
max Максимальное значение ввода String, Number 9999999999.99
toFixed Количество знаков после запятой Number 2
Событие Описание Возвращаемое значение
onKeyboardOpen Открытие пользовательской клавиатуры data
close Закрытие пользовательской клавиатуры data
input Изменение текущего значения ввода data

Структура файлов

.
├── README.md
├── babel.config.js
├── package-lock.json
├── package.json
└── src
    ├── App.vue // демо
    ├── components
    │   └── customInput // пользовательский цифровой ввод
    │       ├── index.js
    │       ├── input.vue
    │       └── keyboard.vue
    └── main.js

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/biabia123456-custom-number-input-keyboard.git
git@api.gitlife.ru:oschina-mirror/biabia123456-custom-number-input-keyboard.git
oschina-mirror
biabia123456-custom-number-input-keyboard
biabia123456-custom-number-input-keyboard
master