When I looked at this question, I needed something simple. There are already a number of framework answers on how to do this, but sometimes they are easier and more flexible to create your own. Of course, you get a certain amount for free using the framework (and often this is the right choice if it suits), but then you need to worry about compatibility with the framework, support and digging in the back of the frame to go beyond its borders.
Here is a simple javascript slider. This is mainly img for the slider, img for the button and callback with a percentage of progress. Not a complete and dance slider, but something easy to use.
Demo
HTML
<div id='bb_sliderContainer' ondragstart="return false;" ondrop="return false;"> <img id='bb_slider' src='slider.png'/> <img id='bb_sliderButton' src='sliderbutton.png'/> </div>
script
Place in javascript file:
(function(bb,undefined){ bb.Slider = function(buttonCssId,sliderCssId,initialPercentage,progressUpdate) { var halfButtonWidth = 5; var sliderMoving = false; var buttonElement = document.getElementById(buttonCssId); var sliderElement = document.getElementById(sliderCssId); var length = sliderElement.clientWidth; var leftPos = 0; var rightPos = leftPos + length; length = rightPos - leftPos; if( initialPercentage ) { var buttonPos = leftPos + initialPercentage / 100 * length; buttonElement.style.left = buttonPos - halfButtonWidth + 'px'; } buttonElement.addEventListener( 'mousedown', function(){ sliderMoving = true; } ); document.addEventListener( 'mousemove', function(event){ if( sliderMoving == true ) { var rect = sliderElement.getBoundingClientRect(); var mouseX = event.clientX - rect.left; var prop = mouseX / length; if( prop < 0 ) { prop = 0; mouseX = 0; } if( prop > 1 ) { prop = 1; mouseX = length; } buttonElement.style.left = leftPos + prop * length - halfButtonWidth + 'px'; progressUpdate(prop * 100); } }); document.addEventListener( 'mouseup', function(){ sliderMoving = false; }); } }(window.bb = window.bb || {}));
Usage example
HTML:
<img src='space.png' style='width:50%;position:relative;top:20px' id='bb_sliderSubject'>
JavaScript:
function sliderUpdate(percentage) { var sliderSubject = document.getElementById('bb_sliderSubject'); sliderSubject.style.width = percentage + '%'; } window.onload=function() { var slider = new bb.Slider('bb_sliderButton','bb_slider',50,sliderUpdate); }
acarlon May 8 '14 at 22:12 2014-05-08 22:12
source share