(function($) { $.fn.extend({ strackbar: function(options) { var settings = $.extend({ style: 'style1', defaultValue: 0, sliderHeight: 4, sliderWidth: 200, trackerHeight: 20, trackerWidth: 19, minValue: 0, maxValue: 10, borderWidth: 1, animate: true, ticks: true, labels: true, callback: null }, options); return this.each(function() { var mousecaptured = false; var mouseDown = false; var previousMousePosition = 0; var stepValue = parseFloat(settings.sliderWidth / settings.maxValue); var currentValue = settings.minValue; var sliderLeft = 0; var sliderRight = 0; var ltop = 0; var element = $(this); var minvallabel = $('
').attr('id', 'min-val').css('float', 'left'); var maxvallabel = $('
').attr('id', 'max-val').css('float', 'left'); var wrapper = $('
').css('float', 'left'); var contents = $('
').attr('id', 'jscroll').addClass('jscroller'); var slider = $('
').attr('id', 'slider').addClass('slider'); var selection = $('
').attr('id', 'inner').html(' ').addClass('inner'); var ltracker = $('
').attr('id', 'lgripper').addClass('lgripper'); if (settings.labels) element.append(minvallabel); element.append(wrapper); wrapper.append(contents); contents.append(slider); slider.append(selection); contents.append(ltracker); if (settings.labels) element.append(maxvallabel); ltracker.css('height', settings.trackerHeight + 'px').css('width', settings.trackerWidth + 'px').css('left', '0'); slider.css('width', settings.sliderWidth - (settings.borderWidth * 2)).css('height', settings.sliderHeight); slider.css('-moz-border-radius', (settings.sliderHeight) + 'px'); slider.css('-webkit-border-radius', (settings.sliderHeight) + 'px'); slider.css('border-radius', (settings.sliderHeight) + 'px'); selection.css('-moz-border-radius', (settings.sliderHeight) + 'px'); selection.css('-webkit-border-radius', (settings.sliderHeight) + 'px'); selection.css('border-radius', (settings.sliderHeight) + 'px'); slider.addClass(settings.style); selection.addClass(settings.style); ltracker.addClass(settings.style); contents.addClass(settings.style); //element.css('padding-top', settings.trackerHeight / 2); var clear = $('
'); clear.css('clear', 'both'); element.append(clear); wrapper.css('width', settings.sliderWidth + 'px'); //maxvallabel.html(settings.maxValue).css('margin-top', -(settings.trackerHeight / 4) + 'px').css('padding-left', '6px'); //minvallabel.html(settings.minValue).css('margin-top', -(settings.trackerHeight / 4) + 'px').css('padding-right', '4px'); maxvallabel.html(settings.maxValue).css('padding-left', '6px'); //.css('margin-top', '-2px'); minvallabel.html(settings.minValue).css('padding-right', '4px'); //.css('margin-top', '-2px'); var sliderBottom = settings.sliderHeight; sliderLeft = slider.offset().left; sliderRight = sliderLeft + settings.sliderWidth; ltop = (settings.trackerHeight / 2) - settings.sliderHeight / 2; previousMousePosition = sliderLeft; /*generates tick marks */ var ticks = $(""); ticks.css('position', 'absolute'); var height = slider.get(0).offsetHeight - 4; //var height = settings.sliderHeight; var sliderBorder = slider.get(0).offsetHeight - settings.sliderHeight; ltop -= sliderBorder / 2; ticks.css('top', height + 'px') ticks.attr('id', 'ticks'); ticks.addClass('ticks'); ticks.css('width', settings.sliderWidth + 'px'); ticks.css('margin-left', stepValue / 2 + 'px'); ticks.css('margin-top', '0px'); var totalTicks = settings.sliderWidth / stepValue; for (var count = 0; count < totalTicks; count++) { //var tick = $('
  • |
  • '); //tick.css('width', stepValue + 'px'); //ticks.append(tick); } if (settings.ticks) slider.after(ticks); ltracker.css('top', -ltop + 'px'); //set the default position if (settings.defaultValue != 0) { setPosition(settings.defaultValue * stepValue); previousMousePosition = sliderLeft + settings.defaultValue * stepValue; if (settings.callback != null) settings.callback(settings.defaultValue); } ltracker.mousedown(function(e) { mousecaptured = true; previousMousePosition = e.pageX; $(this).css('cursor', 'pointer'); }); ltracker.mouseup(function(e) { mousecaptured = false; $(this).css('cursor', 'default'); }); $(document).mouseup(function() { mousecaptured = false; $(this).css('cursor', 'default'); }); $(document).mousemove(function(e) { if (mousecaptured) { setTrackerPosition(e.pageX); e.stopPropagation(); e.preventDefault(); e.stopImmediatePropagation(); } }); slider.mouseenter(function(e) { $(this).css('cursor', 'pointer'); }); slider.mouseout(function(e) { $(this).css('cursor', 'default'); }); slider.mousedown(function(e) { if (!mouseDown) { mouseDown = true; $(this).css('cursor', 'pointer'); mousecaptured = false; setTrackerPosition(e.pageX); } }); function getpositionvalue(pos) { var val = parseInt(pos.replace('px', '')); return val; } function getDragAmount(cursorCurrentPosition, cursorPreviousPosition) { var dragAmount = cursorCurrentPosition - cursorPreviousPosition; if (cursorPreviousPosition <= 0) { dragAmount = cursorCurrentPosition - sliderLeft; previousMousePosition = sliderLeft + dragAmount; } if (cursorPreviousPosition > cursorCurrentPosition) dragAmount = cursorPreviousPosition - cursorCurrentPosition; return dragAmount; } function isForwardDirection(cursorCurrentPosition, cursorPreviousPosition) { if (cursorCurrentPosition > cursorPreviousPosition) return true; else return false; } function validatePosition(position) { if (position >= 0 && position <= settings.sliderWidth) return true; else return false; } function setPosition(position) { if (validatePosition(position)) { var selectionWidth = getpositionvalue(ltracker.css('left')) + settings.trackerWidth / 2; if (settings.animate && !mousecaptured) { ltracker.animate({ 'left': position + 'px' }, 500, function() { selectionWidth = getpositionvalue(ltracker.css('left')) + settings.trackerWidth / 2; selection.css('width', selectionWidth + 'px'); mouseDown = false; }); /*settings.animate = false;*/ } else { ltracker.css('left', position + 'px'); selectionWidth = getpositionvalue(ltracker.css('left')) + settings.trackerWidth / 2; selection.css('width', selectionWidth + 'px'); mouseDown = false; } } } function setTrackerPosition(cursorPosition) { var dragAmount = getDragAmount(cursorPosition, previousMousePosition); var isForward = isForwardDirection(cursorPosition, previousMousePosition); var trackerPosition = getpositionvalue(ltracker.css('left')); if (cursorPosition >= sliderLeft && cursorPosition <= (sliderRight - stepValue / 10)) { if (trackerPosition >= 0 && trackerPosition <= settings.sliderWidth - stepValue / 10) { if (isForward) trackerPosition += dragAmount; else trackerPosition -= dragAmount; setPosition(trackerPosition); var newPosition = cursorPosition - sliderLeft; var cVal = newPosition / stepValue; currentValue = parseInt(cVal); if (trackerPosition > (settings.sliderWidth - stepValue) + stepValue / 10) { currentValue = parseInt(settings.sliderWidth / stepValue); } if (settings.callback != null) settings.callback(currentValue); } previousMousePosition = cursorPosition; } } }); } }); })(jQuery);