jquery.circlemenu.min.js 5.6 KB

1
  1. !function(t,e,i,o){function n(t,e,i){["-webkit-","-moz-","-o-","-ms-",""].forEach(function(o){t.css(o+e,i)})}function s(e,i){this._timeouts=[],this.element=t(e),this.options=t.extend({},a,i),this._defaults=a,this._name=r,this.init(),this.hook()}var r="circleMenu",a={depth:0,item_diameter:30,circle_radius:80,angle:{start:0,end:90},speed:500,delay:1e3,step_out:20,step_in:-20,trigger:"hover",border:"round",close_event:"click",transition_function:"ease"};s.prototype.init=function(){var e,i=this,o={vertical:[-400,0],"vertical-top":[-800,0],horizontal:[400,0],"bottom-left":[180,90],bottom:[135,45],right:[-45,45],left:[225,135],top:[225,315],"bottom-half":[180,0],"right-half":[-90,90],"left-half":[270,90],"top-half":[180,360],"top-left":[270,180],"top-right":[270,360],full:[-90,270-Math.floor(360/(i.element.children("li").length-1))],"bottom-right":[0,90]};i._state="closed",i._locked=!1,i.element.addClass(r+"-closed"),"string"==typeof i.options.direction&&(e=o[i.options.direction.toLowerCase()])&&(i.options.angle.start=e[0],i.options.angle.end=e[1]),i.menu_items=i.element.children("li:not(:first-child)"),i.initCss(),i.item_count=i.menu_items.length,i._step=(i.options.angle.end-i.options.angle.start)/(i.item_count-1),i.menu_items.each(function(e){var o=t(this),n=(i.options.angle.start+i._step*e)*(Math.PI/180),s=Math.round(i.options.circle_radius*Math.cos(n)),a=Math.round(i.options.circle_radius*Math.sin(n));i.options.angle.start<-360&&(s=0,a=e*i.options.circle_radius+i.options.circle_radius),i.options.angle.start>360&&(s=e*i.options.circle_radius+i.options.circle_radius,a=0),i.options.angle.start<-790&&(s=0,a=-(e*i.options.circle_radius+i.options.circle_radius)),o.data("plugin_"+r+"-pos-x",s),o.data("plugin_"+r+"-pos-y",a),o.on(i.options.close_event,function(){i.select(e+2)})}),["open","close","init","select"].forEach(function(t){var e;i.options[t]&&(e=i.options[t],i.element.on(r+"-"+t,function(){return e.apply(i,arguments)}),delete i.options[t])}),i.submenus=i.menu_items.children("ul"),i.submenus.circleMenu(t.extend({},i.options,{depth:i.options.depth+1})),i.trigger("init")},s.prototype.trigger=function(){var t,e,i=[];for(t=0,e=arguments.length;t<e;t++)i.push(arguments[t]);this.element.trigger(r+"-"+i.shift(),i)},s.prototype.hook=function(){var t=this;"hover"===t.options.trigger?t.element.on("mouseenter",function(e){t.open()}).on("mouseleave",function(e){t.close()}):"click"===t.options.trigger?t.element.children("li:first-child").children().addBack().on("clicked click",function(e){return e.preventDefault(),!1===t._locked&&(t._locked=!0,"closed"===t._state||"closing"===t._state?t.open():t.close(!0),setTimeout(function(){t._locked=!1},350)),!1}):t.options.trigger},s.prototype.open=function(){var e,i=this,o=this.element;return i.clearTimeouts(),"open"===i._state?i:(o.addClass(r+"-open"),o.removeClass(r+"-closed"),(e=i.options.step_out>=0?i.menu_items:t(i.menu_items.get().reverse())).each(function(e){var o=t(this);i._timeouts.push(setTimeout(function(){o.css({left:o.data("plugin_"+r+"-pos-x")+"px",top:o.data("plugin_"+r+"-pos-y")+"px"}),n(o,"transform","scale(1)")},0+Math.abs(i.options.step_out)*e))}),i._timeouts.push(setTimeout(function(){"opening"===i._state&&i.trigger("open"),i._state="open"},0+Math.abs(i.options.step_out)*e.length)),i._state="opening",i)},s.prototype.close=function(e){var i=this,o=this.element,s=function(){var e;return i.submenus.circleMenu("close"),i.clearTimeouts(),"closed"===i._state?i:((e=i.options.step_in>=0?i.menu_items:t(i.menu_items.get().reverse())).each(function(e){var o=t(this);i._timeouts.push(setTimeout(function(){o.css({top:0,left:0}),n(o,"transform","scale(0)")},0+Math.abs(i.options.step_in)*e))}),i._timeouts.push(setTimeout(function(){"closing"===i._state&&i.trigger("close"),i._state="closed"},0+Math.abs(i.options.step_in)*e.length)),o.removeClass(r+"-open"),o.addClass(r+"-closed"),i._state="closing",i)};return e?s():i._timeouts.push(setTimeout(s,i.options.delay)),this},s.prototype.select=function(t){var e,i,o=this;"open"!==o._state&&"opening"!==o._state||(o.clearTimeouts(),i=o.element.children("li:not(:nth-child("+t+"),:first-child)"),e=o.element.children("li:nth-child("+t+")"),o.trigger("select",e),n(e.add(i),"transition","all 500ms ease-out"),n(e,"transform","scale(0)"),n(i,"transform","scale(0)"),e.css("opacity","0"),i.css("opacity","0"),o.element.removeClass(r+"-open"),setTimeout(function(){o.initCss()},500))},s.prototype.clearTimeouts=function(){for(var t;t=this._timeouts.shift();)clearTimeout(t)},s.prototype.initCss=function(){var t,e=this,i=String(e.options.item_diameter).match(/^.*(px|%|em)$/)?"":"px";e._state="closed",e.element.removeClass(r+"-open"),e.element.css({"list-style":"none",margin:0,padding:0,width:e.options.item_diameter+i}),(t=e.element.children("li")).attr("style",""),t.css({display:"block",width:e.options.item_width?e.options.item_width:"4em",height:e.options.item_height?e.options.item_height:e.options.item_diameter+i,"text-align":"center","line-height":e.options.item_diameter+i,position:"absolute","z-index":1,opacity:""}),e.element.children("li:first-child").css({"z-index":1e3-e.options.depth,"background-color":"transparent"}),e.menu_items.css({top:0,left:0}),"square"===e.options.border?n(t,"border-radius",e.options.item_diameter/5+i):n(t,"border-radius",e.options.item_diameter+i),n(e.menu_items,"transform","scale(0)"),setTimeout(function(){n(t,"transition","all "+e.options.speed+"ms "+e.options.transition_function)},0)},t.fn[r]=function(e){return this.each(function(){var i=t.data(this,"plugin_"+r),o={init:function(){i.init()},open:function(){i.open()},close:function(){i.close(!0)}};"string"==typeof e&&i&&o[e]&&o[e](),i||t.data(this,"plugin_"+r,new s(this,e))})}}(jQuery,window,document);