/
jquery.knobby.min.js
1 lines (1 loc) · 2.63 KB
/
jquery.knobby.min.js
1
!function(l){l.fn.knobby=function(t){function S(t,a){this.x=t,this.y=a}var Y=[],D=180/Math.PI,h=l.extend({min:0,max:100,step:1,turn:1,size:4,handleSize:1,handleGap:.25,sensitivity:1},t),v=function(t){return t<0&&(t=v(t+360)),t};return this.each(function(a){Y[a]=!1;var u=l(this),t=l("<div>");t.addClass("knobby-wrap");var c=l("<div>");c.addClass("knobby-knob");var e=l("<div>");e.addClass("knobby-handle");var n=l("<div>");n.addClass("knobby-shadow"),n.appendTo(c),e.appendTo(c),t.append(c),t.insertBefore(this),u.insertAfter(c),u.addClass("knobby-input");var f,g,m=!1,b=u.attr("min")?parseFloat(u.attr("min")):h.min,y=parseFloat(u.attr("max"))||h.max,i=parseFloat(u.attr("step"))||h.step,F=parseFloat(u.attr("turn"))||h.turn,w=parseFloat(u.val())||0,o=parseFloat(u.attr("size"))||h.size,r=parseFloat(u.attr("handle-size"))||h.handleSize,s=u.attr("handle-gap")?parseFloat(u.attr("handle-gap")):h.handleGap,x=parseFloat(u.attr("sensitivity"))||h.sensitivity,d=i.toString().length-1;0<d&&--d;var p=(Math.round(w/i)*i).toFixed(d);u.val(p),c.css({width:2*o+"em",height:2*o+"em"}),e.css({width:r+"em",height:r+"em",marginTop:-r/2+"em",marginLeft:-r/2+"em"});var k=parseFloat(c.width()),z=!1;u.bind("input change",function(t){z||(w=parseFloat(l(this).val())||0,void 0!==y&&y<w&&(w=y),void 0!==b&&w<b&&(w=b),M("change"==t.type),T())});var C=0;c.bind("mousedown touchstart",function(t){m=!0,Y[a]=!0,"touchstart"==t.type&&(C=t.originalEvent.changedTouches[0].identifier)}),l(window).bind("mousemove touchmove",function(t){if(m){var a=0,e=0;if("mousemove"==t.type&&(a=t.pageX-c.position().left,e=t.pageY-c.position().top),"touchmove"==t.type){var n,i=t.originalEvent.changedTouches;if(i)for(var o=0;o<i.length;o++)i[o].identifier==C&&(n=i[o]);n&&(a=n.pageX-c.position().left,e=n.pageY-c.position().top)}(a||e)&&(f||g)&&(s=(r=k/2)-a,d=r-e,p=new S(r-f,r-g),h=new S(s,d),90<(v=Math.atan(p.x/p.y)*D-Math.atan(h.x/h.y)*D)&&(v-=180),v<-90&&(v+=180),w+=v/360*(y-b)/F*x,void 0!==y&&y<w&&(w=y),void 0!==b&&w<b&&(w=b),M(!0),T(),z=!0,u.trigger("change"),z=!1),f=a,g=e,t.preventDefault()}else g=f=null;for(var r,s,d,p,h,v,l=0;l<Y.length;l++)if(Y[l])return void t.preventDefault()}),l(window).bind("mouseup touchend",function(t){m=!1,g=f=void 0,Y[a]=!1}),c.bind("dragstart drop",function(){return!1}).css("cursor","pointer");var M=function(t){void 0===t&&(t=!0);var a=i.toString().length-1;0<a&&--a,p=(Math.round(w/i)*i).toFixed(a),t&&u.val(p)},T=function(){var t=v(360*F/(y-b)*(p-b));e.css("transform"," translateY(-"+parseFloat(o-r/2-s)+"em) rotate(-"+t+"deg)"),c.css("transform","rotate("+t+"deg)"),n.css("transform","rotate(-"+t+"deg)")};void 0!==y&&y<w&&(w=y),void 0!==b&&w<b&&(w=b),M(!0),T()}),this}}(jQuery);