bootstrap-slider.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. (function($){
  2. function slider(options){
  3. if(typeof options === 'number'){
  4. options = $.extend(
  5. {
  6. origVal:options
  7. },
  8. defaults,
  9. {
  10. val:(( options < 0 ) ? 0 : ( (options > 100 ) ? 100 : options))
  11. }
  12. );
  13. }
  14. else if (options === "get"){
  15. var vals = [];
  16. $(this).each(function() {
  17. vals.push($(this).data("sliderValue"));
  18. });
  19. return vals;
  20. }
  21. else if(typeof options === 'object'){
  22. options = $.extend({origVal:options.val,origBarColor:options.barColor},defaults,options);
  23. }
  24. return $(this).each (function() {
  25. var self=$(this);
  26. if(self.hasClass("slider-wrapper-jq")){
  27. if(self.data("dragSlider") === "true")
  28. return;
  29. if(typeof options.origVal !== "undefined")
  30. self.slider._setValue.call(self,options.val,null,true);
  31. if(typeof options.origBarColor !== "undefined")
  32. self.find('.progress-bar').css("background-color",options.barColor);
  33. return;
  34. }
  35. self.addClass("slider-wrapper-jq")
  36. .append($("<div class='progress' style='position:relative;left:0'/>")
  37. .append("<div class='progress-bar' style='position:width: 30%;background-color: "+
  38. options.barColor+"; -webkit-transition:none; transition:none;' />")
  39. .append("<div class='btn btn-default ' style='position:absolute;height:100%;padding:6px 10px;margin-left:-10px;vertical-align: top'>"));
  40. self.find('.progress').on('mousedown', function(evt){
  41. self.data("dragSlider","true")
  42. .data("startPoint",evt.pageX)
  43. .data("endPoint",evt.pageX);
  44. if(!$(evt.target).hasClass("btn")){
  45. self.slider._setWidthFromEvent.call(self,evt.pageX,null,true);
  46. }
  47. else{
  48. self.data("btnTarget","true");
  49. }
  50. evt.preventDefault();
  51. evt.stopPropagation();
  52. });
  53. $(window).on('mouseup', function(evt){
  54. if(self.data("dragSlider")==="true"){
  55. if(!(self.data("btnTarget") === "true" && self.data("startPoint") === self.data("endPoint") )){
  56. self.slider._setWidthFromEvent.call(self,evt.pageX);
  57. }
  58. self.removeData("dragSlider")
  59. .removeData("btnTarget")
  60. .removeData("startPoint")
  61. .removeData("endPoint");
  62. }
  63. }).on('mousemove',function(evt){
  64. if(self.data("dragSlider")==="true"){
  65. self.slider._setWidthFromEvent.call(self,evt.pageX,null,false);
  66. self.data("endPoint",evt.pageX);
  67. evt.preventDefault();
  68. }
  69. });
  70. self.slider._setValue.call(self,options.val);
  71. });
  72. }
  73. var defaults={
  74. val:50,
  75. barColor:"#428bca"
  76. },
  77. _setWidthFromEvent = function(pageX,reqVals,supress) {
  78. if(!reqVals){
  79. reqVals = this.slider._getRequiredValues.call(this);
  80. }
  81. else{
  82. reqVals = null;
  83. }
  84. var width = pageX - reqVals.pbar.offset().left,
  85. perc = ((100.0*width) / (reqVals.progw));
  86. return this.slider._setValue.call(this,perc,reqVals,supress);
  87. },
  88. _setValue = function (val,reqVals,supress) {
  89. if(!reqVals){
  90. reqVals = this.slider._getRequiredValues.call(this);
  91. }
  92. val = ((val<0)?0:((val>100)?100:val));
  93. var adjVal= ((val*(100-reqVals.pbutp)/100) + (reqVals.pbutp/2));
  94. this.data("sliderValue",val);
  95. reqVals.pbar.css({width:adjVal+"%"});
  96. this.find('div.btn').css('left',adjVal+"%");
  97. if(supress !== true){
  98. this.trigger("slider.newValue",{val:Math.round(val)});
  99. }
  100. return val;
  101. },
  102. _getRequiredValues = function(){
  103. var pbar=this.find('.progress-bar'),
  104. progw=this.children('.progress').get(0).clientWidth,
  105. pbutp=((this.find('div.btn').get(0).clientWidth*100.0)/progw);
  106. return {
  107. pbar:pbar,
  108. progw:progw,
  109. pbutp:pbutp
  110. };
  111. };
  112. $.fn.slider = slider;
  113. $.fn.slider.defaults = defaults;
  114. $.fn.slider._getRequiredValues = _getRequiredValues ;
  115. $.fn.slider._setWidthFromEvent = _setWidthFromEvent;
  116. $.fn.slider._setValue = _setValue;
  117. })(jQuery);