183 lines
4.5 KiB
Vue
183 lines
4.5 KiB
Vue
|
<template>
|
||
|
<!-- <div id="slider"></div> -->
|
||
|
<div>
|
||
|
<div id="price-values " class="price-values">
|
||
|
<span
|
||
|
>حداقل :
|
||
|
<span ref="minPriceValue"
|
||
|
><input
|
||
|
class="min_value"
|
||
|
type="text"
|
||
|
v-model="sliderValue[0]"
|
||
|
@keyup="sendQuery()"
|
||
|
@keydown="onKeyDown()" /></span
|
||
|
></span>
|
||
|
<span
|
||
|
>حداکثر :
|
||
|
<span ref="maxPriceValue"
|
||
|
><input
|
||
|
class="max_value"
|
||
|
type="text"
|
||
|
v-model="sliderValue[1]"
|
||
|
@keyup="sendQuery()"
|
||
|
@keydown="onKeyDown()" /></span
|
||
|
></span>
|
||
|
</div>
|
||
|
<div ref="priceSlider" id="slider-round" ></div>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import noUiSlider from "nouislider";
|
||
|
import "nouislider/dist/nouislider.css";
|
||
|
export default {
|
||
|
name: "noUiSlider",
|
||
|
|
||
|
|
||
|
data() {
|
||
|
return {
|
||
|
slider: "",
|
||
|
sliderValue: [0, 100],
|
||
|
typingTimer: 0,
|
||
|
doneTypingInterval: 500,
|
||
|
};
|
||
|
},
|
||
|
|
||
|
|
||
|
|
||
|
mounted() {
|
||
|
this.slider = this.$refs.priceSlider;
|
||
|
|
||
|
noUiSlider.create(this.slider, {
|
||
|
start: [0, 100],
|
||
|
connect: true,
|
||
|
step: 10,
|
||
|
range: {
|
||
|
min: 0,
|
||
|
max: 50,
|
||
|
},
|
||
|
pips: {
|
||
|
mode: "steps",
|
||
|
stepped: true,
|
||
|
density: 4,
|
||
|
},
|
||
|
});
|
||
|
this.slider.noUiSlider.on("update", (values) => {
|
||
|
this.sliderValue = values.map((value) => parseInt(value)); // تبدیل مقادیر به عدد صحیح
|
||
|
});
|
||
|
},
|
||
|
watch: {
|
||
|
// sliderValue(newVal){
|
||
|
// this.$refs.priceSlider.noUiSlider.set(newVal);
|
||
|
// }
|
||
|
},
|
||
|
|
||
|
methods: {
|
||
|
updateSliderValue() {
|
||
|
const minInputValue = parseInt(this.sliderValue[0]);
|
||
|
const maxInputValue = parseInt(this.sliderValue[1]);
|
||
|
console.log(this.sliderValue);
|
||
|
if (!isNaN(minInputValue) && !isNaN(maxInputValue)) {
|
||
|
this.sliderValue = [minInputValue, maxInputValue];
|
||
|
this.$refs.priceSlider.noUiSlider.set(this.sliderValue);
|
||
|
}
|
||
|
},
|
||
|
sendQuery() {
|
||
|
clearTimeout(this.typingTimer);
|
||
|
this.typingTimer = setTimeout(() => {
|
||
|
this.updateSliderValue();
|
||
|
}, this.doneTypingInterval);
|
||
|
},
|
||
|
onKeyDown() {
|
||
|
clearTimeout(this.typingTimer);
|
||
|
},
|
||
|
},
|
||
|
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss">
|
||
|
// .noUi-handle {
|
||
|
// width: 10px; /* عرض لغزنده */
|
||
|
// height: 10px; /* ارتفاع لغزنده */
|
||
|
// background-color: #3498db; /* رنگ پس زمینه لغزنده */
|
||
|
// border: 2px solid #2980b9; /* حاشیه لغزنده */
|
||
|
// border-radius: 50%; /* شکل لغزنده (دایره) */
|
||
|
// cursor: pointer; /* نشانگر موس را تغییر دهید */
|
||
|
// }
|
||
|
// // .noUi-active .noUi-handle {
|
||
|
// // transform: scale(1.2); /* تغییر اندازه لغزنده در وضعیت فعال */
|
||
|
// // transition: transform 0.2s ease; /* انیمیشن تغییر اندازه */
|
||
|
// // }
|
||
|
// /* سفارشیسازی شکل ظاهری میله */
|
||
|
// .noUi-connect {
|
||
|
// background: #3498db; /* رنگ پس زمینه میله */
|
||
|
// height: 8px; /* ارتفاع میله */
|
||
|
// border-radius: 10px; /* شکل گرد میله */
|
||
|
// }
|
||
|
|
||
|
// /* سفارشیسازی شکل ظاهری میله در حالت فعال */
|
||
|
|
||
|
|
||
|
// .min_value {
|
||
|
// border: none;
|
||
|
// }
|
||
|
.max_value {
|
||
|
border: none;
|
||
|
}
|
||
|
.min_value {
|
||
|
border: none; /* حذف تمام حاشیهها و بوردرها */
|
||
|
border-bottom: 2px solid #a7a098; /* افزودن بوردر پایین به عنوان حالت پیشفرض */
|
||
|
color: #a7a098;
|
||
|
/* حالت فوکوس */
|
||
|
&:focus {
|
||
|
outline: none; /* حذف نمایش بوردر فوکوس */
|
||
|
|
||
|
}
|
||
|
}
|
||
|
.max_value {
|
||
|
border: none; /* حذف تمام حاشیهها و بوردرها */
|
||
|
border-bottom: 2px solid #a7a098; /* افزودن بوردر پایین به عنوان حالت پیشفرض */
|
||
|
color: #a7a098;
|
||
|
/* حالت فوکوس */
|
||
|
&:focus {
|
||
|
outline: none; /* حذف نمایش بوردر فوکوس */
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.price-values{
|
||
|
margin-bottom: 1rem;
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
span{
|
||
|
margin-bottom: 17px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
#slider-round {
|
||
|
height: 10px;
|
||
|
}
|
||
|
.noUi-connect {
|
||
|
background: #3498db;
|
||
|
|
||
|
}
|
||
|
.noUi-handle {
|
||
|
background-color: #3498db;
|
||
|
height: 18px !important;
|
||
|
width: 18px !important;
|
||
|
top: -5px;
|
||
|
left: -10px !important;
|
||
|
right: -9px ; /* half the width */
|
||
|
border-radius: 9px !important;
|
||
|
cursor: pointer; /* نشانگر موس را تغییر دهید */
|
||
|
}
|
||
|
.noUi-handle::before{
|
||
|
content: none !important;
|
||
|
}
|
||
|
.noUi-handle::after{
|
||
|
content: none !important;
|
||
|
}
|
||
|
|
||
|
</style>
|