Slider with label and tooltip

Slider with label and tooltip

by Ayyappan Sakthivadivel

HTML

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

CSS

#infi-slider {
            width: 95%;
            margin: 2em auto;
        }
        
        #infi-slider label {
            position: absolute;
            width: 20px;
            margin-left: -10px;
            text-align: center;
            margin-top: 30px;
        }
        
        .tooltip-slider {
            position: absolute;
            z-index: 1020;
            display: block;
            padding: 5px;
            font-size: 11px;
            visibility: visible;
            margin-top: -2px;
            bottom: 120%;
            margin-left: -8px;
        }
        
        .tooltip-slider .tooltip-slider-arrow {
            bottom: 0;
            left: 50%;
            margin-left: -5px;
            border-top: 5px solid #000000;
            border-right: 5px solid transparent;
            border-left: 5px solid transparent;
            position: absolute;
            width: 0;
            height: 0;
        }
        
        .tooltip-slider-inner {
            max-width: 200px;
            padding: 3px 8px;
            color: #ffffff;
            text-align: center;
            text-decoration: none;
            background-color: #000000;
            -webkit-border-radius: 4px;
            -moz-border-radius: 4px;
            border-radius: 4px;
        }
        
        .ui-slider-tick-mark {
            display: inline-block;
            width: 1px;
            background: black;
            height: 16px;
            position: absolute;
            top: 15px;
            z-index: 9;
        }
        
        .ui-slider-tick-mark2 {
            display: inline-block;
            width: 1px;
            background: black;
            height: 8px;
            position: absolute;
            top: 15px;
            z-index: 9;
        }
        
        #infi-slider.ui-slider-horizontal .ui-slider-handle {
            z-index: 99;
        }

JavaScript

var initialValue = 0;
    var sliderTooltip = function(event, ui) {
    var tooltip;
    var curValue = ui.value || initialValue;
    if(curValue!=0 && curValue<100){
        tooltip = '<div class="tooltip-slider"><div class="tooltip-slider-inner">' + curValue + 'K</div><div class="tooltip-slider-arrow"></div></div>';
    }
    else if(curValue==100) {
         tooltip = '<div class="tooltip-slider"><div class="tooltip-slider-inner">1L</div><div class="tooltip-slider-arrow"></div></div>';
    }   
    else{
            tooltip = '<div class="tooltip-slider"><div class="tooltip-slider-inner">' + curValue + '</div><div class="tooltip-slider-arrow"></div></div>';
        }
        setSliderTicks(event.target);
        $('.ui-slider-handle').html(tooltip);
}

$( "#infi-slider" ).slider({
		range: "min",
		value: initialValue,
		min: 0,
		max: 100,
		step: 1,
        slide: sliderTooltip, 
        create:sliderTooltip
})

.each(function() {
  var opt = $(this).data().uiSlider.options;
  var vals = opt.max - opt.min;
  for (var i = 0; i <= vals; i+=10) {
      var el;
      if(i!=0 && i<100){
         el = $('<div class="ui-slider-tick-mark"></div>' + '<label>'+(i+0)+'K</label>').css('left',(i/vals*100)+'%'); 
      }
      else if(i==100)
      el = $('<div class="ui-slider-tick-mark"></div>' + '<label>1L</label>').css('left',(i/vals*100)+'%');
      else
      {
          el =  $('<div class="ui-slider-tick-mark"></div>' + '<label>'+(i+0)+'</label>').css('left',(i/vals*100)+'%');
      }
      $( "#infi-slider" ).append(el);
  }
});

function setSliderTicks(el) {
    var $slider =  $(el);
    var max =  $slider.slider("option", "max");    
    var min =  $slider.slider("option", "min");    
    var spacing =  100 / (max - min);

    $slider.find('.ui-slider-tick-mark2').remove();
    for (var i = 0; i < max-min ; i+=5) {
        $('<span class="ui-slider-tick-mark2"></span>').css('left', (spacing * i) +  '%').appendTo($slider); 
     }
}