<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>