if($add===undefined)var $add={version:{},auto:{disabled:false}}; $add.version.Slider = "2.0.1"; $add.SliderObj = function(settings){ Obj.apply(this); function toNearest(num, x){ return (Math.round(num * (1/x)) / (1/x)); } function betterParseFloat(t){return isNaN(parseFloat(t))&&t.length>0?betterParseFloat(t.substr(1)):parseFloat(t)}; this._settings = { direction: "horizontal", min: 0, max: 100, step: 0.1, value: 50, fontsize: 18, formatter: function(x){ if((this._settings.step+"").indexOf(".")>-1) var digits = (this._settings.step+"").split(".").pop().length; else var digits = 0; v = betterParseFloat(x); if(x<0){ var neg = true; x = 0 - x; } else { var neg = false; } if(isNaN(x)){ return "NaN"; } var whole = Math.floor(x); var dec = (x - whole); dec = Math.round(dec * Math.pow(10, digits)); dec = dec+""; while(dec.length0)?"."+dec:""); }, timeout: 2000, range: false, id: false, name: "", class: "" }; Object.defineProperty(this, "settings", { get: function(){ this.trigger("getsetting settings", this._settings); return this._settings; }, set: function(newSettings){ this._settings = $.extend(this._settings, settings); this.trigger("setsettings settings", this._settings); this.refresh(); } }); Object.defineProperty(this, "value", { get: function(){ this.trigger("getvalue value", this._settings.value); return this._settings.value; }, set: function(newVal){ var self = this; this._settings.value = newVal; this._elements.find(".addui-slider-input").val(this._settings.value); if(!this._settings.range){ var offset = betterParseFloat(this._settings.value) - this._settings.min; var per = (toNearest(offset, this._settings.step) / (this._settings.max - this._settings.min)) * 100; if(this._settings.direction == "vertical"){ this._elements.find(".addui-slider-handle").css("bottom", per+"%"); this._elements.find(".addui-slider-range").css("height", per+"%"); this._elements.find(".addui-slider-range").css("bottom", "0%"); } else { this._elements.find(".addui-slider-handle").css("left", per+"%"); this._elements.find(".addui-slider-range").css("width", per+"%"); } this._elements.find(".addui-slider-value span").html(toFunc(this._settings.formatter).call(this, this._settings.value)); } else { var l = (toNearest(parseFloat(this._settings.value.split(",")[0]), this._settings.step)); var h = (toNearest(parseFloat(this._settings.value.split(",")[1]), this._settings.step)); var range = this._settings.max - this._settings.min; var offsetL = l - this._settings.min; var offsetH = h - this._settings.min; var lPer = (offsetL / range) * 100; var hPer = (offsetH / range) * 100; this._elements.each(function(i,el){ var $el = $(el); if(self._settings.direction == "vertical"){ $el.find(".addui-slider-handle").eq(0).css("bottom", lPer+"%"); $el.find(".addui-slider-handle").eq(1).css("bottom", hPer+"%"); $el.find(".addui-slider-range").css("bottom", lPer+"%").css("height", (hPer-lPer)+"%"); } else { $el.find(".addui-slider-handle").eq(0).css("left", lPer+"%"); $el.find(".addui-slider-handle").eq(1).css("left", hPer+"%"); $el.find(".addui-slider-range").css("left", lPer+"%").css("width", (hPer-lPer)+"%"); } $el.find(".addui-slider-handle").eq(0).find(".addui-slider-value span").html(toFunc(self._settings.formatter).call(self, l)); $el.find(".addui-slider-handle").eq(1).find(".addui-slider-value span").html(toFunc(self._settings.formatter).call(self, h)); }); } } }); this.renderer = function(){ var self = this; var $slider = $("
"); var $input = $("").appendTo($slider); var $track = $("
").appendTo($slider); var $range = $("
").appendTo($track); if(!this._settings.range){ var $handle = $("
").appendTo($track); var activeTimer = null; function dragHandler(e){ e.preventDefault(); if(self._settings.direction == "vertical"){ if(e.type == "touchmove") var y = e.originalEvent.changedTouches[0].pageY; else var y = e.pageY; var sliderY = $slider.offset().top + $slider.height(); var offsetY = sliderY - y; var offsetPer = (offsetY / $slider.height()) * 100; } else { if(e.type == "touchmove") var x = e.originalEvent.changedTouches[0].pageX; else var x = e.pageX; var sliderX = $slider.offset().left; var offsetX = x - sliderX; var offsetPer = (offsetX / $slider.width()) * 100; } var val = toNearest((offsetPer / 100) * (self._settings.max - self._settings.min), self._settings.step) + self._settings.min; val = Math.min(self._settings.max,Math.max(self._settings.min,val)); self.value = toNearest(val, self._settings.step); }; function dragStopHandler(e){ $(window).off("mousemove touchmove", dragHandler); activeTimer = setTimeout(function(){ $handle.removeClass("addui-slider-handle-active"); }, self._settings.timeout); }; $handle.on("mousedown touchstart", function(e){ clearTimeout(activeTimer); $handle.addClass("addui-slider-handle-active"); $(window).on("mousemove touchmove dragmove", dragHandler); $(window).one("mouseup touchend", dragStopHandler); }); $slider.on("click", function(e){ e.preventDefault(); if(self._settings.direction == "vertical"){ if(e.type == "touchmove") var y = e.originalEvent.changedTouches[0].pageY; else var y = e.pageY; var sliderY = $slider.offset().top + $slider.height(); var offsetY = sliderY - y; var offsetPer = (offsetY / $slider.height()) * 100; } else { if(e.type == "touchmove") var x = e.originalEvent.changedTouches[0].pageX; else var x = e.pageX; var sliderX = $slider.offset().left; var offsetX = x - sliderX; var offsetPer = (offsetX / $slider.width()) * 100; } var val = toNearest((offsetPer / 100) * (self._settings.max - self._settings.min), self._settings.step) + self._settings.min; val = Math.min(self._settings.max,Math.max(self._settings.min,val)); clearTimeout(activeTimer); $handle.addClass("addui-slider-handle-active"); activeTimer = setTimeout(function(){ $handle.removeClass("addui-slider-handle-active"); }, self._settings.timeout); self.value = val; }); } else { var $handle1 = $("
").appendTo($track); var activeTimer1 = null; function dragHandler1(e){ e.preventDefault(); if(self._settings.direction == "vertical"){ if(e.type == "touchmove") var y = e.originalEvent.changedTouches[0].pageY; else var y = e.pageY; var sliderY = $slider.offset().top + $slider.height(); var offsetY = sliderY - y; var range = self._settings.max - self._settings.min; var offsetPer = (offsetY / $slider.height()) * 100; } else { if(e.type == "touchmove") var x = e.originalEvent.changedTouches[0].pageX; else var x = e.pageX; var sliderX = $slider.offset().left; var offsetX = x - sliderX; var range = self._settings.max - self._settings.min; var offsetPer = (offsetX / $slider.width()) * 100; } var offsetVal = offsetPer / 100 * range; var val = toNearest(offsetVal + self._settings.min, self._settings.step); val = Math.min(self._settings.max, Math.max(self._settings.min, val)); var higherVal = toNearest(betterParseFloat(self._settings.value.split(',')[1]), self._settings.step); if(higherVal < val) higherVal = val; self.value = val+","+higherVal; }; function dragStopHandler1(e){ $(window).off("mousemove touchmove", dragHandler1); activeTimer1 = setTimeout(function(){ $handle1.removeClass("addui-slider-handle-active"); }, self._settings.timeout); }; $handle1.on("mousedown touchstart", function(e){ clearTimeout(activeTimer1); $handle1.addClass("addui-slider-handle-active"); $(window).on("mousemove touchmove dragmove", dragHandler1); $(window).one("mouseup touchend", dragStopHandler1); }); var $handle2 = $("
").appendTo($track); var activeTimer2 = null; function dragHandler2(e){ e.preventDefault(); if(self._settings.direction == "vertical"){ if(e.type == "touchmove") var y = e.originalEvent.changedTouches[0].pageY; else var y = e.pageY; var sliderY = $slider.offset().top + $slider.height(); var offsetY = sliderY - y; var offsetPer = (offsetY / $slider.height()) * 100; } else { if(e.type == "touchmove") var x = e.originalEvent.changedTouches[0].pageX; else var x = e.pageX; var sliderX = $slider.offset().left; var offsetX = x - sliderX; var offsetPer = (offsetX / $slider.width()) * 100; } var range = self._settings.max - self._settings.min; var offsetVal = offsetPer / 100 * range; var val = toNearest(offsetVal + self._settings.min, self._settings.step); val = Math.min(self._settings.max, Math.max(self._settings.min, val)); var lowerVal = toNearest(betterParseFloat(self._settings.value.split(',')[0]), self._settings.step); if(lowerVal > val) lowerVal = val; self.value = lowerVal+","+val; }; function dragStopHandler2(e){ $(window).off("mousemove touchmove", dragHandler2); activeTimer2 = setTimeout(function(){ $handle2.removeClass("addui-slider-handle-active"); }, self._settings.timeout); }; $handle2.on("mousedown touchstart", function(e){ clearTimeout(activeTimer2); $handle2.addClass("addui-slider-handle-active"); $(window).on("mousemove touchmove dragmove", dragHandler2); $(window).one("mouseup touchend", dragStopHandler2); }); } return $slider; }; this.init = function(settings){ var self = this; this.settings = settings; if(!this._settings.range){ this._settings.value = Math.max(this._settings.min, Math.min(this._settings.max, betterParseFloat(this._settings.value))); } else { var val = this._settings.value+""; if(val.indexOf(",") > -1){ // Already has two values var values = val.split(","); var v1 = betterParseFloat(values[0]); v1 = Math.min(this._settings.max, Math.max(this._settings.min, v1)); v1 = toNearest(v1, this._settings.step); var v2 = betterParseFloat(values[1]); v2 = Math.min(this._settings.max, Math.max(this._settings.min, v2)); v2 = toNearest(v2, this._settings.step); } else { // Only has one value var val = toNearest(Math.max(this._settings.min, Math.min(this._settings.max, betterParseFloat(this._settings.value))), this._settings.step); var middle = (this._settings.max - this._settings.min) / 2; if(val < middle){ var v1 = val; var v2 = this._settings.max - val; } else { var v2 = val; var v1 = this._settings.min + val; } } if(v1