Sangat sering di situs web toko online, dan tidak hanya, Anda dapat memfilter dengan slider untuk memilih rentang nilai. Di salah satu proyek, saya juga perlu membuat slider seperti itu.
Hal pertama yang terlintas dalam pikiran adalah menemukan yang sudah jadi dan menempelnya di situs Anda. Lalu saya menemui masalah. Plugin JqueryUI.slider yang saya temukan menolak untuk berfungsi pada beberapa perangkat seluler. Saya tidak dapat mengidentifikasi masalah (tetapi tidak benar-benar, dan ingin melihat-lihat kode orang lain) dan memutuskan untuk membuat "sepeda" sendiri.
Saya memutuskan untuk melakukan "sepeda" dalam JavaScript murni agar tidak mengacaukan perpustakaan. Seperti yang dikatakan salah seorang teman saya: "semakin sedikit koneksi" kiri ", semuanya semakin stabil."
Karena itu, hal pertama yang saya lakukan adalah membuat model yang begitu sederhana
<div class="filter"> <div> <span> 1</span> <div><number>10</number><number>50</number></div> <div class="slider"> <div class="block-min" onMouseDown="moveRange(this)" onTouchStart="moveRange(this)"></div> <div class="color-range"></div> <div class="block-max" onMouseDown="moveRange(this)" onTouchStart="moveRange(this)"></div> </div> </div> <div> <span> 2</span> <div><number>0</number><number>5</number></div> <div class="slider"> <div class="block-min" onMouseDown="moveRange(this)" onTouchStart="moveRange(this)"></div> <div class="color-range"></div> <div class="block-max" onMouseDown="moveRange(this)" onTouchStart="moveRange(this)"></div> </div> </div> </div>
Di layar terlihat seperti ini

Penggeser dengan penggeser itu sendiri berada dalam blok dengan kelas "penggeser" di mana terdapat 2 blok lagi: penggeser nilai minimum dan penggeser nilai rentang maksimum.
Mereka menggambarkan dua peristiwa:
- onMouseDown - dipicu ketika kita mengambil slider dengan mouse;
- onTouchStart - berfungsi pada perangkat seluler saat Anda menyentuh jari Anda di slider kami.
Di atas slider adalah blok dengan dua angka - ini adalah nilai maksimum dan minimum kami.
<div><number>0</number><number>5</number></div>
Sekarang mari kita beralih ke fungsi itu sendiri, yang dipanggil saat klik.
function moveRange (elem) {
Fungsi getCoords memungkinkan kita untuk mendapatkan koordinat dan ukuran elemen kita.
Ini terlihat sebagai berikut.
function getCoords(elem) { let coords = elem.getBoundingClientRect(); return {
Sekarang kami menjelaskan fungsi-fungsi handler.
Fungsi pertama adalah onMouseMove, yang dipanggil saat mouse bergerak. Ini akan berhasil hanya dengan gerakan horizontal.
function onMouseMove(e) { e.preventDefault();
Dan akhirnya, fungsi pengendali acara "tombol pelepas" atau hilangnya titik sentuh pada perangkat seluler. Ini menghapus semua peristiwa yang ditambahkan sebelumnya dan meninggalkan slider pada nilai yang ditetapkan.
function onMouseUp() { document.removeEventListener('mouseup', onMouseUp); document.removeEventListener('mousemove', onMouseMove); document.removeEventListener('touchend', onMouseUp); document.removeEventListener('touchmove', onMouseMove); }
Dan, tentu saja, gaya CSS untuk slider kami
.filter { padding: 30px; width: 500px; } .filter>div { padding-top: 20px; display: -webkit-flex; display: -moz-flex; display: -ms-flex; display: -o-flex; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; } .filter>div>div { display: -webkit-flex; display: -moz-flex; display: -ms-flex; display: -o-flex; display: flex; justify-content: space-between; } .filter .slider { margin-top: 10px; position: relative; height: 6px; background: #fff; border: 1px solid #000; } .filter .color-range { position: absolute; background: #a4a4a4; width: 97%; border: none; height: 6px; left: 15px; } .filter .block-min, .block-max { width: 15px; height: 25px; position: absolute; left: 0; top: -11.5px; background: #fff; border: 1px solid #000; border-radius: 4px; z-index: 1; } .filter .block-max{ left: 97%; }
Lihat versi kerja slider ini di sini .
Semua file dapat diunduh dari GitHub .
Penggunaan yang menyenangkan dan pekerjaan mudah!