Ranges
Single Range Slider with input
12 Oct 2022
Single Range Slider with input
HTML
SCSS
JS
<div class="single-range-container single-range-inputs">
<div
id="single-range-inputs"
class="single-range"
data-min="0"
data-max="5000"
data-unit="$"
data-step="10"
></div>
<div class="single-range-inputs__container">
<span class="unit"></span>
<input
class="single-range-input"
id="single-range-value-min"
value="200"
type="text"
/>
</div>
</div>
.single-range {
padding-right: 15px;
margin-bottom: 30px;
height: 6px;
border-radius: 12px;
border: none;
box-shadow: none;
background: lightgrey;
.noUi-connect {
background: orange;
}
.noUi-handle {
background: orange;
width: 18px;
height: 18px;
border: 2px solid white;
cursor: pointer;
border-radius: 50%;
box-shadow: none;
&:before,
&:after {
content: none;
}
}
}
.single-range-inputs {
&__container {
display: flex;
align-items: center;
}
.single-range-input {
border: 1px solid orange;
background: transparent;
border-radius: 4px;
padding: 6px 10px;
width: 38%;
line-height: 1.2;
height: auto;
color: white;
&:focus {
border: 1px solid blue;
}
}
span {
font-size: 16px;
line-height: 1;
color: white;
&.unit {
margin-right: 2px;
}
}
}
const singleRangeSliderInputs = () => {
const singleRange = document.getElementsByClassName("single-range-inputs")[0];
if (singleRange) {
const slider = singleRange.querySelector("#single-range-inputs");
const max = +slider.dataset.max;
const min = +slider.dataset.min;
const unit = slider.dataset?.unit || "£";
const step = +slider.dataset.step;
const input = singleRange.querySelector(".single-range-input");
const unitItem = singleRange.querySelector(".unit");
const startValue = +input.value;
noUiSlider.create(slider, {
start: [startValue],
connect: 'lower',
margin: 10,
step: step,
range: {
min: min,
max: max,
},
});
unitItem.textContent = unit;
slider.noUiSlider.on("update", function (values) {
input.value = Math.round(values);
});
input.addEventListener("input", function () {
input.value = input.value.replace(/[^\d.]/g, "");
slider.noUiSlider.set(input.value);
});
}
};
singleRangeSliderInputs();
На базі плагіна noUiSlider.
В data-атрибути вносяться мінімальне, максимальне значення, валюта, крок (на скільки в одному кроці буде мінятися значення).
В data-unit вноситься валюта, якщо потрібен фунт (£), то можна просто видалити цей атрибут, дефолтне значення - фунт.
Є інпут. Туди запусується значення яке вибирається в слайдері. Якщо ввести нове значення, автоматично слайдер оновиться.