- @stanko/dual-range-input adalah pustaka input rentang ganda native yang menggunakan dua input rentang HTML native.
- Dengan menggunakan input native, semua interaksi bawaan dan fitur aksesibilitas tetap dipertahankan.
- Terdiri dari sekitar 50 baris JavaScript dan CSS.
- Mengapa ini diperlukan
- Digunakan UI untuk menyesuaikan parameter dalam alat gambar generatif, dan dibutuhkan slider minimum serta maksimum.
- Solusi yang ada bergantung pada JavaScript dan mengimplementasikan ulang fitur drag serta aksesibilitas.
- Ingin menggunakan input rentang HTML native, dan saat trek diklik, slider terdekat harus berpindah ke nilai tersebut.
- Cara kerjanya
- Dua input ditempatkan berdampingan, dan saat input berubah, titik tengah dari kedua nilai dihitung.
- Atribut minimum dan maksimum diatur ke titik tengah, lalu lebar input diperbarui.
- Mengubah ukuran input
- Saat menghitung lebar input, perlu diperhatikan bahwa trek lebih pendek daripada lebar input sebenarnya.
- Perhitungannya disederhanakan dengan menambahkan lebar thumb ke lebar input.
- Padding ditambahkan ke wrapper input untuk mengakomodasi tambahan lebar thumb.
- Memindahkan thumb saat diklik
- Ukuran input disesuaikan agar bertemu di titik tengah, sehingga saat diklik, thumb terdekat berpindah ke nilai tersebut.
- Jika mode debug diaktifkan, titik tengah dapat dilihat dengan mudah.
- Styling
- Input rentang dapat diberi gaya menggunakan CSS.
- Styling untuk trek dan thumb cukup sederhana, dan radius batas di bagian sambungan tengah trek dihilangkan.
- Tema
- Beberapa variabel diekspos agar tema dapat diubah dengan mudah.
- Nilai default disediakan, dan tema dapat dibuat dengan menimpa variabel tersebut.
- Gradien
- Menggunakan gradien CSS untuk mewarnai rentang yang dipilih.
- Variabel
--dri-gradient-position digunakan untuk mengatur gradien, dan diperbarui dalam kode bersama lebarnya.
- Kesimpulan
- Tulisan ini dibuat untuk merapikan pemikiran, dan diharapkan bisa menginspirasi untuk mencoba menggunakan elemen native.
1 komentar
Komentar Hacker News
<input type=range>, dan di Firefox ada bug saat mengklik handle yang membuat nilainya berubah satu langkah setiap kali