Покращуємо input для адмін-панелей на JavaScript

2023-Mar-29

Сьогодні ми додамо покращення в будь-яку форму або адмін панель, де застосовується input type="number". Якщо ви багато працюєте в адмін панелях сайтів, то знаєте, що дуже часто доводиться вводити багато інформації в різні форми. Зробимо на JavaScript доробку input з числом, щоб при прокручуванні коліщатка миші можна було змінювати числа в даному input (і так, у Photoshop є подібна функція і вона дуже зручна).

Для початку створимо верстку:

<div>
   <input type="number" value = "0">
</div>
<div>
   <input type="number" value="100" step="10">
</div>

два input взято спеціально, щоб показати можливість роботи з будь-якою кількістю input на сторінці. Підключимо JavaScript і спочатку отримаємо все input і повісимо на них функцію.

const inputs = document.querySelectorAll('input[type="number"]');

inputs.forEach(item => item.addEventListener('wheel', inputWheel));

function inputWheel(){}

Зверніть увагу, подія wheel (onwheel) викликає прокручування сторінки (адже ми крутимо колесо миші) і це потрібно, коли курсор знаходиться над inputб блокувати. Також подію можна додавати без перебору циклом, за допомогою делегування.

Для початку заблокуємо прокручування сторінки:

function inputWheel(event){
   event.preventDefault();
}

Тепер змінюватимемо value інпуту. Для цього отримаємо інпут з яким працюємо (this) та змінимо його value:

function inputWheel(event){
   event.preventDefault();
   this.value = (+this.value)
}

Недоліки очевидні - код працює тільки на збільшення значення числа з кроком 1. Виправимо першу проблему. У event є властивість, що дозволяє зрозуміти напрямки обертання коліщатка миші - event.deltaY. На підставі цього можна виправити код так:

function inputWheel(event){
   if (event.deltaY > 0) {
     this.value = (+this.value) + 1;
   }
   else {
     this.value = (+this.value) - 1;
   }
}

Відмінно. Тепер крок зміни числа. У деякі елементи input ми додали атрибут step рівний значенню кроку. Додамо до функції код, що дозволяє отримати цей крок. Якщо атрибуту немає - крок дорівнює одиниці.

function inputWheel(event){
   let step = 1;
   if (this.getAttribute('step')) {
     step = +this.getAttribute('step');
   }

   if (event.deltaY > 0) {
     this.value = (+this.value) + step;
   }
   else {
     this.value = (+this.value) - step;
   }
}

Код готовий. Його можна оптимізувати - перегляньте відео.

Переглянути відео з цього уроку:

Завантажити файл з кодом: Download

Статті

Підсвічуємо НЕ ЛАТИНСЬКІ СИМВОЛИ у коді та тексті
Тотальная інструкція по елементу Select у JavaScript
Кнопка "Показати пароль" на JavaScript + анімація