এইচটিএমএল 5: দুটি ইনপুট সহ স্লাইডার সম্ভব?


107

দুটি ইনপুট মান সহ কোনও এইচটিএমএল 5 স্লাইডার তৈরি করা সম্ভব, উদাহরণস্বরূপ দামের সীমাটি নির্বাচন করা? যদি তা হয় তবে কীভাবে এটি করা যায়?

উত্তর:


69

না, এইচটিএমএল 5 রেঞ্জের ইনপুট কেবল একটি ইনপুট গ্রহণ করে। আমি আপনাকে সেই কাজের জন্য jQuery UI রেঞ্জ স্লাইডারের মতো কিছু ব্যবহার করার পরামর্শ দিচ্ছি ।


লিঙ্ক এবং তথ্যের জন্য ধন্যবাদ। মোবাইল ডিভাইসগুলি চালানোর জন্য আমি এটি পেতে পারি কিনা তা আমাকে পরীক্ষা করতে হবে।
প্রায়শই

36
কিছু সময় আগে ... তবে আমি একে অপরের ঠিক উপরে দুটি স্লাইডার রেখে একটি ডাবল স্লাইডার "নকল" করতে সক্ষম হয়েছি। একটি ন্যূনতম মান থেকে শুরু হয়, অন্যটি সর্বোচ্চ-মান থেকে শুরু হয়। আমি অনুমান করি যে এটি প্রতারণা করছে তবে ... এটি আমার পক্ষে কাজ করে।
ঘন ঘন

হোয়াটডাব্লুজি কমপক্ষে এটি বাস্তবায়নের বিষয়ে আলোচনা করছে: html.spec.whatwg.org/m মাল্টিপেজ/…
কুনম্বি

7
আমি jQuery ইউআই স্লাইডারটি থেকে আমি আয়নরেঞ্জস্লাইডারটি আরও ভালভাবে পছন্দ
শার্লট

5
আরেকটি উপায় হ'ল পাশের-পাশের ইনপুট নিয়ন্ত্রণগুলির সাথে ডাবল স্লাইডারটি "নকল": সরল.গি
ব্লগ

85

আমি কিছু সময়ের জন্য একটি হালকা ওজন, নির্ভরতা মুক্ত দ্বৈত স্লাইডার সন্ধান করছি (কেবল এটির জন্য jQuery আমদানি করা পাগল বলে মনে হয়েছিল) এবং সেখানে খুব বেশি উপস্থিত হবে বলে মনে হয় না। আমি @ ওয়াইল্ডহনির কোডটি কিছুটা সংশোধন করে শেষ করেছি এবং সত্যিই এটি পছন্দ করে।


দুর্ভাগ্যক্রমে এটি অ্যান্ড্রয়েড .4.০.৪ মোবাইল সাফারি 4.0 ব্রাউজারের সাথে কাজ করে না। :-(
এরিক

@ এরিক এই সংস্করণগুলি পরীক্ষা করার আমার কাছে সত্যিই ভাল উপায় নেই তবে সাফারিটির সর্বশেষ সংস্করণটি (যা গুগল প্লে বলেছে 1.2 এর সাথে 1.2, তাই আমি আপনার 4.0 সম্পর্কে আমি বিভ্রান্ত) নিয়ে এটি Android 5.0 এ আমার জন্য কাজ করে। যদি আপনি এটি বুঝতে পারেন, আমি জানতে আগ্রহী।
গ্যারি

4
আসলেই চালাক! আমি আশ্চর্য হই যে কীভাবে এটি সঠিক উত্তর হিসাবে চিহ্নিত করা হয়নি যেহেতু এটি কোনও প্রকার নির্ভরতা ছাড়াই সমস্যার সমাধান করে সমাধান করে। এটি করার জন্য jQuery যুক্ত করা স্পষ্টতই ওভারকিল।
জ্যানোনা

@ জাজোনা ধন্যবাদ তবে সঠিক উত্তরটি 4 বছর আগে চিহ্নিত করা হয়েছিল, সুতরাং আমি মনে করি না যে ওপি অন্য কোনও সমাধানের জন্য খুব বেশি যত্ন নিয়েছে।
গ্যারি

12
আমি আপনার পন্থাটি সত্যিই পছন্দ করি এবং এটি আমার ব্যবহারের ক্ষেত্রে মানিয়ে নেওয়ার চেষ্টা করেছি কিন্তু যখন বুঝতে পারলাম যে আমার কাছে কিছু ডিজাইনের স্পেসিফিকেশন রয়েছে (যেমন ট্র্যাকের বাকী অংশের চেয়ে পরিসরের "সক্রিয়" অংশটি রঙ করা) ) এটির সাথে বাস্তবায়ন সম্ভব নয়। সুতরাং আমি অন্য সমাধানের সন্ধান করলাম এবং এটি সত্যই ঝরঝরে প্রকল্পের মধ্যে পেয়েছি: refreshless.com/nouislider এটি নির্ভরতা মুক্ত, একটি সুন্দর এবং পরিষ্কার এপিআই রয়েছে, এটিএমডি সামঞ্জস্যপূর্ণ এবং প্রচুর বিকল্প সরবরাহ করে। এখনও পর্যন্ত আমি এতে বেশ খুশি।
ফেলিক্স ওয়েইনবার্গ

39

দেরীতে আসছে, কিন্তু noUiSlider jQuery-ui নির্ভরতা এড়িয়ে চলে, যা গৃহীত উত্তরটি দেয় না। আইসি 9 এবং নতুনটির পক্ষে এটির একমাত্র "ক্যাভিয়েট" সমর্থন, যদি লিগ্যাসি আইই আপনার জন্য একটি চুক্তি ভঙ্গকারী হয়।

এটি নিখরচায়, মুক্ত উত্স এবং কোনও বিধিনিষেধ ছাড়াই বাণিজ্যিক প্রকল্পগুলিতে ব্যবহার করা যেতে পারে।

ইনস্টলেশন: noUiSlider ডাউনলোড করুন, আপনার সাইট ফাইল সিস্টেমে কোথাও সিএসএস এবং জেএস ফাইল বের করুন এবং তারপরে সিএসএসের সাথে মাথা থেকে এবং জেএস থেকে শরীরের লিঙ্ক করুন:

<!-- In <head> -->
<link href="nouislider.min.css" rel="stylesheet">

<!-- In <body> -->
<script src="nouislider.min.js"></script>

ব্যবহারের উদাহরণ: একটি স্লাইডার তৈরি করে যা 0 থেকে 100 পর্যন্ত চলে এবং 20-80 এ সেট শুরু হয়।

এইচটিএমএল:

<div id="slider">
</div>

জেএস:

var slider = document.getElementById('slider');

noUiSlider.create(slider, {
    start: [20, 80],
    connect: true,
    range: {
        'min': 0,
        'max': 100
    }
});

4
খুবই সুন্দর!! এটি আমাদের প্রয়োজন ঠিক এবং এটি আশ্চর্যজনকভাবে বিকশিত হয়েছে! কি jQuery
ডেভিডটউবমান

এটি যুক্ত করা মোটামুটি সহজ হওয়া উচিত এবং নিজেই এই প্রকল্পে একটি অনুরোধ প্রেরণ করুন?
dario_ramos

4
আমি এটি খনন করি নি, তবে আমি কীবোর্ডের সাহায্যে স্লাইডারটি ব্যবহার করতে পারি, তাই আমার মনে হয় এটি এখনই বাস্তবায়িত হয়েছে @ptrin :)
এডু রুইজ

24

নিশ্চিত যে আপনি কেবল একে অপরকে ওভারলাই করে দুটি স্লাইডার ব্যবহার করতে পারেন এবং জাভাস্ক্রিপ্টের একটি বিট যোগ করতে পারেন (আসলে 5 টির বেশি নয়) নির্বাচকরা ন্যূনতম / সর্বোচ্চ মানগুলি (@ গ্যারিগুলির মতো) সমাধানের চেয়ে বেশি নয়।

আপনি যা করতে পারেন তা প্রদর্শনের জন্য কিছু CSS3 স্টাইলিং সহ একটি বর্তমান প্রকল্পের সাথে সংযুক্ত একটি সংক্ষিপ্ত স্নিপেট পাবেন Att আমি নির্বাচিত মানগুলি প্রদর্শন করতে কিছু লেবেলও যুক্ত করেছি।

এটি জিকিউরি ব্যবহার করে তবে একটি ভ্যানিলাজ সংস্করণ যাদু নয়।

    (function() {

        function addSeparator(nStr) {
            nStr += '';
            var x = nStr.split('.');
            var x1 = x[0];
            var x2 = x.length > 1 ? '.' + x[1] : '';
            var rgx = /(\d+)(\d{3})/;
            while (rgx.test(x1)) {
                x1 = x1.replace(rgx, '$1' + '.' + '$2');
            }
            return x1 + x2;
        }

        function rangeInputChangeEventHandler(e){
            var rangeGroup = $(this).attr('name'),
                minBtn = $(this).parent().children('.min'),
                maxBtn = $(this).parent().children('.max'),
                range_min = $(this).parent().children('.range_min'),
                range_max = $(this).parent().children('.range_max'),
                minVal = parseInt($(minBtn).val()),
                maxVal = parseInt($(maxBtn).val()),
                origin = $(this).context.className;

            if(origin === 'min' && minVal > maxVal-5){
                $(minBtn).val(maxVal-5);
            }
            var minVal = parseInt($(minBtn).val());
            $(range_min).html(addSeparator(minVal*1000) + ' €');


            if(origin === 'max' && maxVal-5 < minVal){
                $(maxBtn).val(5+ minVal);
            }
            var maxVal = parseInt($(maxBtn).val());
            $(range_max).html(addSeparator(maxVal*1000) + ' €');
        }

     $('input[type="range"]').on( 'input', rangeInputChangeEventHandler);
})();
body{
font-family: sans-serif;
font-size:14px;
}
input[type='range'] {
  width: 210px;
  height: 30px;
  overflow: hidden;
  cursor: pointer;
    outline: none;
}
input[type='range'],
input[type='range']::-webkit-slider-runnable-track,
input[type='range']::-webkit-slider-thumb {
  -webkit-appearance: none;
    background: none;
}
input[type='range']::-webkit-slider-runnable-track {
  width: 200px;
  height: 1px;
  background: #003D7C;
}

input[type='range']:nth-child(2)::-webkit-slider-runnable-track{
  background: none;
}

input[type='range']::-webkit-slider-thumb {
  position: relative;
  height: 15px;
  width: 15px;
  margin-top: -7px;
  background: #fff;
  border: 1px solid #003D7C;
  border-radius: 25px;
  z-index: 1;
}


input[type='range']:nth-child(1)::-webkit-slider-thumb{
  z-index: 2;
}

.rangeslider{
    position: relative;
    height: 60px;
    width: 210px;
    display: inline-block;
    margin-top: -5px;
    margin-left: 20px;
}
.rangeslider input{
    position: absolute;
}
.rangeslider{
    position: absolute;
}

.rangeslider span{
    position: absolute;
    margin-top: 30px;
    left: 0;
}

.rangeslider .right{
   position: relative;
   float: right;
   margin-right: -5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="rangeslider">
                                <input class="min" name="range_1" type="range" min="1" max="100" value="10" />
                                <input class="max" name="range_1" type="range" min="1" max="100" value="90" />
                                <span class="range_min light left">10.000 €</span>
                                <span class="range_max light right">90.000 €</span>
                            </div>


7
আরে দুর্দান্ত লাগছে! তবে এটি ফায়ারফক্সে কাজ করে না, আপনি কেবল সর্বোচ্চ ইনপুটটি টেনে আনতে পারেন। আপনি এটি ঠিক করতে পরিচালনা করেছেন?
টনি মিশেল কাওবেট

6
ওহ মানুষ. আমি এখানে প্রায় একই জিনিস যুক্ত করতে এসেছি! সরল.জি / ব্লগ / অ্যারেঞ্জ- স্লাইডার-টু- হ্যান্ডলস আমার সংস্করণ ইনপুটগুলি পাশাপাশি রাখে, তবে দ্বৈত ইনপুটগুলিও ব্যবহার করে।
সিম্পলজি

10

আসলে আমি আমার স্ক্রিপ্টটি সরাসরি এইচটিএমএলে ব্যবহার করেছি। তবে জাভাস্ক্রিপ্টে আপনি যখন এই ইভেন্টের জন্য ইনপুট ইভেন্ট শ্রোতাদের যুক্ত করেন এটি স্বয়ংক্রিয়ভাবে ডেটা দেয় You আপনার প্রয়োজন অনুযায়ী মান নির্ধারণ করা দরকার।

[slider] {
  width: 300px;
  position: relative;
  height: 5px;
  margin: 45px 0 10px 0;
}

[slider] > div {
  position: absolute;
  left: 13px;
  right: 15px;
  height: 5px;
}
[slider] > div > [inverse-left] {
  position: absolute;
  left: 0;
  height: 5px;
  border-radius: 10px;
  background-color: #CCC;
  margin: 0 7px;
}

[slider] > div > [inverse-right] {
  position: absolute;
  right: 0;
  height: 5px;
  border-radius: 10px;
  background-color: #CCC;
  margin: 0 7px;
}


[slider] > div > [range] {
  position: absolute;
  left: 0;
  height: 5px;
  border-radius: 14px;
  background-color: #d02128;
}

[slider] > div > [thumb] {
  position: absolute;
  top: -7px;
  z-index: 2;
  height: 20px;
  width: 20px;
  text-align: left;
  margin-left: -11px;
  cursor: pointer;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.4);
  background-color: #FFF;
  border-radius: 50%;
  outline: none;
}

[slider] > input[type=range] {
  position: absolute;
  pointer-events: none;
  -webkit-appearance: none;
  z-index: 3;
  height: 14px;
  top: -2px;
  width: 100%;
  opacity: 0;
}

div[slider] > input[type=range]:focus::-webkit-slider-runnable-track {
  background: transparent;
  border: transparent;
}

div[slider] > input[type=range]:focus {
  outline: none;
}

div[slider] > input[type=range]::-webkit-slider-thumb {
  pointer-events: all;
  width: 28px;
  height: 28px;
  border-radius: 0px;
  border: 0 none;
  background: red;
  -webkit-appearance: none;
}

div[slider] > input[type=range]::-ms-fill-lower {
  background: transparent;
  border: 0 none;
}

div[slider] > input[type=range]::-ms-fill-upper {
  background: transparent;
  border: 0 none;
}

div[slider] > input[type=range]::-ms-tooltip {
  display: none;
}

[slider] > div > [sign] {
  opacity: 0;
  position: absolute;
  margin-left: -11px;
  top: -39px;
  z-index:3;
  background-color: #d02128;
  color: #fff;
  width: 28px;
  height: 28px;
  border-radius: 28px;
  -webkit-border-radius: 28px;
  align-items: center;
  -webkit-justify-content: center;
  justify-content: center;
  text-align: center;
}

[slider] > div > [sign]:after {
  position: absolute;
  content: '';
  left: 0;
  border-radius: 16px;
  top: 19px;
  border-left: 14px solid transparent;
  border-right: 14px solid transparent;
  border-top-width: 16px;
  border-top-style: solid;
  border-top-color: #d02128;
}

[slider] > div > [sign] > span {
  font-size: 12px;
  font-weight: 700;
  line-height: 28px;
}

[slider]:hover > div > [sign] {
  opacity: 1;
}
<div slider id="slider-distance">
  <div>
    <div inverse-left style="width:70%;"></div>
    <div inverse-right style="width:70%;"></div>
    <div range style="left:0%;right:0%;"></div>
    <span thumb style="left:0%;"></span>
    <span thumb style="left:100%;"></span>
    <div sign style="left:0%;">
      <span id="value">0</span>
    </div>
    <div sign style="left:100%;">
      <span id="value">100</span>
    </div>
  </div>
  <input type="range" value="0" max="100" min="0" step="1" oninput="
  this.value=Math.min(this.value,this.parentNode.childNodes[5].value-1);
  let value = (this.value/parseInt(this.max))*100
  var children = this.parentNode.childNodes[1].childNodes;
  children[1].style.width=value+'%';
  children[5].style.left=value+'%';
  children[7].style.left=value+'%';children[11].style.left=value+'%';
  children[11].childNodes[1].innerHTML=this.value;" />

  <input type="range" value="100" max="100" min="0" step="1" oninput="
  this.value=Math.max(this.value,this.parentNode.childNodes[3].value-(-1));
  let value = (this.value/parseInt(this.max))*100
  var children = this.parentNode.childNodes[1].childNodes;
  children[3].style.width=(100-value)+'%';
  children[5].style.right=(100-value)+'%';
  children[9].style.left=value+'%';children[13].style.left=value+'%';
  children[13].childNodes[1].innerHTML=this.value;" />
</div>


তুমি একজন প্রতিভাবান! এটি একটি দুর্দান্ত ধারণা এবং আপনার স্টাইলিংটিও দুর্দান্ত।
পুস্পাম

3

প্রশ্নটি ছিল: "দুটি ইনপুট মান সহ একটি এইচটিএমএল 5 স্লাইডার তৈরি করা সম্ভব, উদাহরণস্বরূপ দামের সীমাটি নির্বাচন করা? যদি তা হয় তবে কীভাবে এটি করা যায়?"

দশ বছর আগে উত্তর সম্ভবত 'না' ছিল। তবে সময় বদলেছে। ইন 2020 অবশেষে একটি নির্মাণ করা সম্ভব দুই অঙ্গুষ্ঠ সঙ্গে সম্পূর্ণরূপে অ্যাক্সেসযোগ্য নেটিভ, অ jQuery HTML5 এর স্লাইডার মূল্য ব্যাপ্তির জন্য। আমি ইতিমধ্যে এই সমাধানটি তৈরি করার পরে যদি এটি পোস্ট করা হয় এবং আমি ভেবেছিলাম যে আমার বাস্তবায়নটি এখানে ভাগ করে নেওয়া ভাল লাগবে।

এই বাস্তবায়নটি মোবাইল ক্রোম এবং ফায়ারফক্স (অ্যান্ড্রয়েড) এবং ক্রোম এবং ফায়ারফক্স (লিনাক্স) পরীক্ষিত হয়েছে। আমি অন্যান্য প্ল্যাটফর্মগুলি সম্পর্কে নিশ্চিত নই, তবে এটি বেশ ভাল হওয়া উচিত। আমি আপনার প্রতিক্রিয়া পেতে এবং এই সমাধানটি উন্নত করতে চাই।

এই সমাধানটি এক পৃষ্ঠায় একাধিক উদাহরণ দেয় এবং এতে স্ক্রিন পাঠকদের জন্য বর্ণনামূলক লেবেল যুক্ত মাত্র দুটি ইনপুট (প্রতিটি) থাকে। আপনি গ্রিড লেবেলের পরিমাণে থাম্বের আকার নির্ধারণ করতে পারেন। এছাড়াও, আপনি স্লাইডারের সাথে ইন্টারঅ্যাক্ট করতে স্পর্শ, কীবোর্ড এবং মাউস ব্যবহার করতে পারেন। 'ইনপুট' ইভেন্ট শ্রোতার কারণে মানটি সামঞ্জস্যের সময় আপডেট হয়।

আমার প্রথম পন্থাটি ছিল স্লাইডারগুলিকে ওভারলে করে সেগুলি ক্লিপ করা। যাইহোক, এর ফলে প্রচুর ব্রাউজার নির্ভরতা সহ জটিল কোড আসে। তারপরে আমি দুটি স্লাইডার দিয়ে সমাধানটি পুনরায় তৈরি করেছি যা ছিল 'ইনলাইন'। এটি নীচে আপনি সমাধান পাবেন solution

var thumbsize = 14;

function draw(slider,splitvalue) {

    /* set function vars */
    var min = slider.querySelector('.min');
    var max = slider.querySelector('.max');
    var lower = slider.querySelector('.lower');
    var upper = slider.querySelector('.upper');
    var legend = slider.querySelector('.legend');
    var thumbsize = parseInt(slider.getAttribute('data-thumbsize'));
    var rangewidth = parseInt(slider.getAttribute('data-rangewidth'));
    var rangemin = parseInt(slider.getAttribute('data-rangemin'));
    var rangemax = parseInt(slider.getAttribute('data-rangemax'));

    /* set min and max attributes */
    min.setAttribute('max',splitvalue);
    max.setAttribute('min',splitvalue);

    /* set css */
    min.style.width = parseInt(thumbsize + ((splitvalue - rangemin)/(rangemax - rangemin))*(rangewidth - (2*thumbsize)))+'px';
    max.style.width = parseInt(thumbsize + ((rangemax - splitvalue)/(rangemax - rangemin))*(rangewidth - (2*thumbsize)))+'px';
    min.style.left = '0px';
    max.style.left = parseInt(min.style.width)+'px';
    min.style.top = lower.offsetHeight+'px';
    max.style.top = lower.offsetHeight+'px';
    legend.style.marginTop = min.offsetHeight+'px';
    slider.style.height = (lower.offsetHeight + min.offsetHeight + legend.offsetHeight)+'px';
    
    /* correct for 1 off at the end */
    if(max.value>(rangemax - 1)) max.setAttribute('data-value',rangemax);

    /* write value and labels */
    max.value = max.getAttribute('data-value'); 
    min.value = min.getAttribute('data-value');
    lower.innerHTML = min.getAttribute('data-value');
    upper.innerHTML = max.getAttribute('data-value');

}

function init(slider) {
    /* set function vars */
    var min = slider.querySelector('.min');
    var max = slider.querySelector('.max');
    var rangemin = parseInt(min.getAttribute('min'));
    var rangemax = parseInt(max.getAttribute('max'));
    var avgvalue = (rangemin + rangemax)/2;
    var legendnum = slider.getAttribute('data-legendnum');

    /* set data-values */
    min.setAttribute('data-value',rangemin);
    max.setAttribute('data-value',rangemax);
    
    /* set data vars */
    slider.setAttribute('data-rangemin',rangemin); 
    slider.setAttribute('data-rangemax',rangemax); 
    slider.setAttribute('data-thumbsize',thumbsize); 
    slider.setAttribute('data-rangewidth',slider.offsetWidth);

    /* write labels */
    var lower = document.createElement('span');
    var upper = document.createElement('span');
    lower.classList.add('lower','value');
    upper.classList.add('upper','value');
    lower.appendChild(document.createTextNode(rangemin));
    upper.appendChild(document.createTextNode(rangemax));
    slider.insertBefore(lower,min.previousElementSibling);
    slider.insertBefore(upper,min.previousElementSibling);
    
    /* write legend */
    var legend = document.createElement('div');
    legend.classList.add('legend');
    var legendvalues = [];
    for (var i = 0; i < legendnum; i++) {
        legendvalues[i] = document.createElement('div');
        var val = Math.round(rangemin+(i/(legendnum-1))*(rangemax - rangemin));
        legendvalues[i].appendChild(document.createTextNode(val));
        legend.appendChild(legendvalues[i]);

    } 
    slider.appendChild(legend);

    /* draw */
    draw(slider,avgvalue);

    /* events */
    min.addEventListener("input", function() {update(min);});
    max.addEventListener("input", function() {update(max);});
}

function update(el){
    /* set function vars */
    var slider = el.parentElement;
    var min = slider.querySelector('#min');
    var max = slider.querySelector('#max');
    var minvalue = Math.floor(min.value);
    var maxvalue = Math.floor(max.value);
    
    /* set inactive values before draw */
    min.setAttribute('data-value',minvalue);
    max.setAttribute('data-value',maxvalue);

    var avgvalue = (minvalue + maxvalue)/2;

    /* draw */
    draw(slider,avgvalue);
}

var sliders = document.querySelectorAll('.min-max-slider');
sliders.forEach( function(slider) {
    init(slider);
});
* {padding: 0; margin: 0;}
body {padding: 40px;}

.min-max-slider {position: relative; width: 200px; text-align: center; margin-bottom: 50px;}
.min-max-slider > label {display: none;}
span.value {height: 1.7em; font-weight: bold; display: inline-block;}
span.value.lower::before {content: "€"; display: inline-block;}
span.value.upper::before {content: "- €"; display: inline-block; margin-left: 0.4em;}
.min-max-slider > .legend {display: flex; justify-content: space-between;}
.min-max-slider > .legend > * {font-size: small; opacity: 0.25;}
.min-max-slider > input {cursor: pointer; position: absolute;}

/* webkit specific styling */
.min-max-slider > input {
  -webkit-appearance: none;
  outline: none!important;
  background: transparent;
  background-image: linear-gradient(to bottom, transparent 0%, transparent 30%, silver 30%, silver 60%, transparent 60%, transparent 100%);
}
.min-max-slider > input::-webkit-slider-thumb {
  -webkit-appearance: none; /* Override default look */
  appearance: none;
  width: 14px; /* Set a specific slider handle width */
  height: 14px; /* Slider handle height */
  background: #eee; /* Green background */
  cursor: pointer; /* Cursor on hover */
  border: 1px solid gray;
  border-radius: 100%;
}
.min-max-slider > input::-webkit-slider-runnable-track {cursor: pointer;}
<div class="min-max-slider" data-legendnum="2">
    <label for="min">Minimum price</label>
    <input id="min" class="min" name="min" type="range" step="1" min="0" max="3000" />
    <label for="max">Maximum price</label>
    <input id="max" class="max" name="max" type="range" step="1" min="0" max="3000" />
</div>

নোট করুন যে redraws / redraw বাগের কারণে মানগুলি পরিবর্তন করতে রোধ করতে আপনার পদক্ষেপের আকার 1 এ রাখা উচিত।

অনলাইনে এখানে দেখুন: https://codepen.io/joosts/pen/rNLdxvK


আপনাকে ধন্যবাদ, আমি সমাধানটি সত্যিই পছন্দ করি!
স্বতোপলুক লেদল

রাউন্ডিংয়ের সাথে আমার সমস্যা হয়েছে যদিও ( avgvalueXX.5 হতে পারে)। ফলস্বরূপ আপনি বাম স্লাইডার সহ ন্যূনতম আকার 1 এর পরিধি তৈরি করতে পারেন তবে ডান স্লাইডার সহ 0 টি করতে পারেন। আমি সঙ্গে এটি মীমাংসিত করেছি floor/ ceilসংশ্লিষ্ট ইনপুট এর জন্য max/ min+ + শর্তাধীন padding-leftদ্বিতীয় স্লাইডার এইভাবে উভয় পক্ষের কমপক্ষে আকার 1 পরিসীমা অনুমোদন করার জন্য।
স্বতোপলুক লেদল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.