Мульті range input на чистому JavaScript та Bootstrap

03.07.2022 | Написав

Мені знадобився для одного проекту multi range input. Іншими словами повзунок з діапазоном. Зазвичай він робиться за допомогою Jquery UI Slider. Але цей проект не використовував JQuery, і чіпляти тільки заради цього функціоналу додаткову бібліотеку не хотілось. Я використав скрипт Slider for Bootstrap трохи його допилявши. Тим більше що сайт був зверстаний на Bootstrap 5, який з цієї версії перестав використовувати JQuery.

1. Що нам потрібно отримати:

2. Робимо верстку та підключаємо сам скрипт. Я додав його с CDN, також він є на Github. Ще зауважу, що в документації вказані версії Bootstrap 3 та 4, але не зважайте на це, на 5-й версії скрипт теж праціє.

<div class="filter__item">    
  <div class="filter__item--head">
    <a class="filter__item--title" data-bs-toggle="collapse" href="#collapseFilter-2" role="button" aria-expanded="false" aria-controls="collapseFilter-2">
      <span>Price</span>
    </a>
  </div>
  <div class="filter__item--content collapse show" id="collapseFilter-2">
    <div class="filter-price__labels">
      <span id="filter-price-min-label"></span>                                
      <span id="filter-price-max-label"></span>
    </div>
    <div id="filter-price__block" class="filter-price__block">
      <input id="filter-price" data-slider-id='filter-price' type="text" data-slider-min="0" data-slider-max="500" data-slider-step="1" data-slider-value="1"/>
    </div>
  </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/11.0.2/bootstrap-slider.min.js" integrity="sha512-f0VlzJbcEB6KiW8ZVtL+5HWPDyW1+nJEjguZ5IVnSQkvZbwBt2RfCBY0CBO1PsMAqxxrG4Di6TfsCPP3ZRwKpA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/11.0.2/css/bootstrap-slider.min.css" integrity="sha512-3q8fi8M0VS+X/3n64Ndpp6Bit7oXSiyCnzmlx6IDBLGlY5euFySyJ46RUlqIVs0DPCGOypqP8IRk/EyPvU28mQ==" crossorigin="anonymous" referrerpolicy="no-referrer" />

3. І тепер додаємо трохи JavaScript, щоб все це запрацювало:

//ініціалізуємо слайдер
const filterPrice = new Slider("#filter-price", { 
   id: "filter-price", 
   min: 0, 
   max: 500, 
   range: true, 
   value: [0, 500] ,
});
 
//передаємо значення діапазону в відповідні блоки та змінюємо їх наживо
window.addEventListener('DOMContentLoaded', function() {
  let rangeMin = document.querySelector('.tooltip-min .tooltip-inner');
  let rangeMinBlock = this.document.querySelector('#filter-price-min-label');
  rangeMinBlock.textContent = rangeMin.textContent + ' USD';
 
  let rangeMax = document.querySelector('.tooltip-max .tooltip-inner');
  let rangeMaxBlock = this.document.querySelector('#filter-price-max-label');
  rangeMaxBlock.textContent = rangeMax.textContent + ' USD';
 
  rangeMin.addEventListener('DOMSubtreeModified', function() {
    rangeMinBlock.textContent = rangeMin.textContent + ' USD';
  })
 
  rangeMax.addEventListener('DOMSubtreeModified', function() {
    rangeMaxBlock.textContent = rangeMax.textContent + ' USD';
  })
 
})

4. Ну і додайте відповідний CSS, слайдер чудово кастомізується через стилі.

Рубрика: Веброзробка
Позначки:,
Коментарі читачів статті "Мульті range input на чистому JavaScript та Bootstrap"

Немає коментарів.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься.

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.