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();
}
})