JQuery Slider - change spaces between rungs / non-uniformity

I'm trying to make a slider like this using jQuery slideshow slide:

example

There should be a specific range for each range, which works fine now.

the problem is that the spaces between the steps do not match this construct.

The result looks something like this: enter image description here

My code:

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



$( "#price-range" ).slider();
    var trueValues =[10e3, 100e3, 250e3, 500e3, 1e6, 5e6];
    var values = ["10k",   "100k",   "250k",    "500k",    "1m",    "5m"];

 function getP(v){
    return (v*100)/trueValues[5];
}

$( "#price-range" ).slider({
        min: 10000,
        max: 5000000,
        value: 10000,
    step: 10000,
        slide: function( event, ui ) {
            console.log(ui.value)
             if(ui.value>=trueValues[0] && ui.value<trueValues[1]){
                 $("#price-range").slider({step:trueValues[0]});//range: 10k-100k, step: 10k
                 console.log("range: 10k-100k, step: 10k")
            }
            else if(ui.value>=trueValues[1] && ui.value<trueValues[2]){
                $("#price-range").slider({step:trueValues[0]});//range: 100k-250k, step: 10k
                console.log("range: 100k-250k, step: 10k")
            }
            else if(ui.value>=trueValues[2] && ui.value<trueValues[3]){
                $("#price-range").slider({step:trueValues[0]*5}); //range: 250k-500k, step: 50k
                console.log("range: 250k-500k, step: 50k")
            }
           else if(ui.value>=trueValues[3] && ui.value<trueValues[4]){
                $("#price-range").slider({step:trueValues[1]}); //range: 500k-1m, step: 100k
               console.log("range: 500k-1m, step: 100k")
            }
           else if(ui.value>=trueValues[4] && ui.value<trueValues[5]){
                $("#price-range").slider({step:trueValues[3]}); //range: 1m-5m, step: 500k
               console.log("range: 1m-5m, step: 500k")
            }

            $("#a").val( addCommas(ui.value) );

        }
    });

$.each(values, function(key,value){

  if(key === 0 || key === values.length-1)
      console.log(trueValues[key])
    w = getP(trueValues[key]);
    
  $("#legend").append("<label style='width: "+w+"%'>"+value+"</laben>");

});
      

* {
    font-family:Arial;
    font-size:20px;
}
body {
    padding:20px;
}
#slider { margin:20px }


label{
  display: inline-block;
  text-align:left;
}
label:first-child{
  text-align:left;
}
label:last-child{
  text-align:right;
}
      

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/black-tie/jquery-ui.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>

<div id="price-range"></div>
<div id="legend"></div>
<input type="text" name="from" id="a" value="10000" placeholder="" />
      

Run codeHide result


or a working fiddle: http://jsfiddle.net/mwugk8j8/1/

it is similar to this question: JQuery Slider how to make a "step" resize

but I have to maintain functionality in between these steps.

I managed to do it with no functionality in between steps: http://jsfiddle.net/3wL12uhL/1/

Found this also - http://codepen.io/martinAnsty/pen/BCotE but still no luck.

How can I achieve this? Thank!

+3


source to share





All Articles