I am looking for a way to make the center of the range slider draggable so that I can move it by pressing on the center from side to side. What I need is support for dragging both controllers; by clicking and dragging between the controllers, both controllers move together. The behavior of this component is to place the controller closest to the clicked position, and I can't find any way to change this from any property.
and there is also a way to add between both inputs this input[type=range]:focus::-webkit-slider-runnable-track { background: #500000; } to create your track in css
const app = Vue.createApp({
data() {
return {
min: 0,
max: 360,
}
},
methods: {
adjust_min() {
this.min = Math.min(this.min, this.max)
this.$emit('fromSlider', Math.trunc(this.min))
},
adjust_max() {
this.max = Math.max(this.min, this.max)
this.$emit('toSlider', Math.trunc(this.max))
},
},
})
.sliders_control {
position: relative;
min-height: 50px;
}
.form_control {
position: relative;
display: flex;
justify-content: space-between;
font-size: 24px;
color: #635a5a;
}
input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;
pointer-events: all;
width: 24px;
height: 24px;
background-color: #fff;
border-radius: 50%;
box-shadow: 0 0 0 1px #C6C6C6;
cursor: pointer;
}
input[type=range]::-moz-range-thumb {
appearance: none;
pointer-events: all;
width: 24px;
height: 24px;
background-color: #000;
border-radius: 50%;
box-shadow: 0 0 0 1px #C6C6C6;
cursor: pointer;
}
input[type=range]::-webkit-slider-thumb:hover {
background: #f7f7f7;
}
input[type=range]::-webkit-slider-thumb:active {
box-shadow: inset 0 0 3px #387bbe, 0 0 9px #387bbe;
-webkit-box-shadow: inset 0 0 3px #387bbe, 0 0 9px #387bbe;
}
input[type="range"] {
// -webkit-appearance: none;
appearance: none;
height: 2px;
width: 100%;
position: absolute;
background-color: #C6C6C6;
pointer-events: none;
}
#fromSlider {
height: 0;
z-index: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div class="sliders_control">
<input id="fromSlider" class="fromSlider" type="range" v-model.number="min" min="0" max="360" step="1"
@input="adjust_min" />
<input id="toSlider" class="toSlider" type="range" v-model.number="max" min="0" max="360" step="1"
@input="adjust_max" />
</div>
Comments
Post a Comment