في كثير من الأحيان على مواقع المتاجر على الإنترنت ، وليس فقط ، يمكنك تصفية مع شريط التمرير لتحديد مجموعة من القيم. في أحد المشاريع ، كنت بحاجة أيضًا إلى عمل شريط تمرير.
أول ما يتبادر إلى الذهن هو العثور على واحد جاهز ولصقه على موقعك. ثم واجهت مشكلة. البرنامج المساعد JqueryUI.slider الذي وجدته رفض العمل على بعض الأجهزة المحمولة. لم أتمكن من تحديد المشكلة (ولكن ليس في الحقيقة ، وأردت أن أتجول في كود شخص آخر) وقررت أن أصنع "دراجة" خاصة بي.
قررت أن أفعل "الدراجة" في جافا سكريبت خالص حتى لا تعبث مع المكتبات. وكما يقول أحد أصدقائي: "كلما قلت الاتصالات" اليسرى "، كلما كان كل شيء أكثر استقرارًا يعمل".
لذلك ، فإن أول شيء فعلته هو تكوين مثل هذا النموذج البسيط
<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>
على الشاشة يبدو مثل هذا

يوجد شريط التمرير مع المنزلقات نفسه في كتلة مع فئة "شريط التمرير" التي يوجد بها كتلتان أخريان: شريط التمرير الحد الأدنى للقيمة ومزلق القيمة القصوى للنطاق.
يصفون حدثين:
- onMouseDown - يتم تشغيله عند الاستيلاء على شريط التمرير باستخدام الماوس ؛
- onTouchStart - يعمل على الأجهزة المحمولة عندما تلمس إصبعك على شريط التمرير.
أعلى شريط التمرير عبارة عن كتلة بها رقمان - هذا هو الحد الأقصى والحد الأدنى لقيمنا.
<div><number>0</number><number>5</number></div>
الآن دعنا ننتقل إلى الوظيفة نفسها ، والتي تسمى عند النقر.
function moveRange (elem) {
تتيح لنا وظيفة getCoords الحصول على إحداثيات وأحجام عناصرنا.
يبدو على النحو التالي.
function getCoords(elem) { let coords = elem.getBoundingClientRect(); return {
الآن نحن تصف وظائف المعالج.
الوظيفة الأولى هي onMouseMove ، والتي تسمى عندما يتحرك الماوس. ستعمل فقط مع الحركة الأفقية.
function onMouseMove(e) { e.preventDefault();
وأخيرًا ، وظيفة المعالج لحدث "زر التحرير" أو فقدان نقطة اللمس على الأجهزة المحمولة. يقوم بحذف جميع الأحداث التي تمت إضافتها مسبقًا ويترك شريط التمرير عند القيمة المحددة.
function onMouseUp() { document.removeEventListener('mouseup', onMouseUp); document.removeEventListener('mousemove', onMouseMove); document.removeEventListener('touchend', onMouseUp); document.removeEventListener('touchmove', onMouseMove); }
وبالطبع ، أنماط CSS لشريط التمرير الخاص بنا
.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%; }
عرض نسخة العمل من هذا شريط التمرير هنا .
يمكن تنزيل جميع الملفات من جيثب .
استخدام ممتعة والعمل السهل!