jquery ui slider / proportional handle, with another slider controlling the width of handle

demo of attempts at jquery ui slider with proportional handle

by hrabinowitz

HTML

<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<h1>
  demo of attempts at jquery ui slider with proportional handle
</h1>
<div id="slider">
  <div id="custom-handle" class="ui-slider-handle">
  </div>
</div>
<br>
<br>
<div id="metaSlider">
	<div id="meta-handle" class="ui-slider-handle">
	</div>
</div>

CSS

#custom-handle {
  width: 120px;
  height: 1.6em;
  top: 50%;
  /*margin-top: -.8em;*/
	/*margin-left: -60px;*/
	margin-left: 0;
  text-align: center;
  line-height: 1.6em;
}

#slider, #metaSlider {
  width: 80%;
}

JavaScript

var $handle = $("#custom-handle");			
	var diffWidth;

  $("#slider").slider({
    create: function() {
      $handle.text($(this).slider("value"));
    },
    slide: function(event, ui) {
			//debugger;
			if (diffWidth === undefined) {
			  	  diffWidth = $('#slider').width() - $handle.width();
			}
			//console.log("ui.value", ui.value, "event.clientX", event.clientX, "diffWidth", diffWidth);
			// minus 10 is for offset of slider from left edge
			if (event.clientX - 10 > diffWidth) {
				console.log("RETURN");
				event.preventDefault();
				return;
			}
      $handle.text(ui.value);
    }
  });
	
	var $metaHandle = $('#meta-handle');
	$('#metaSlider').slider({
    create: function() {
      $metaHandle.text($(this).slider("value"));
    },
    slide: function(event, ui) {
      $metaHandle.text(ui.value);
			$('#custom-handle').css('width', ui.value + '%');
			diffWidth = $('#slider').width() - $handle.width();
    }	
	})