jquery.draggable.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. /**
  2. * jQuery EasyUI 1.3.4
  3. *
  4. * Copyright (c) 2009-2013 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the GPL or commercial licenses
  7. * To use it on other terms please contact us: info@jeasyui.com
  8. * http://www.gnu.org/licenses/gpl.txt
  9. * http://www.jeasyui.com/license_commercial.php
  10. *
  11. */
  12. (function($){
  13. function _1(e){
  14. var _2=$.data(e.data.target,"draggable");
  15. var _3=_2.options;
  16. var _4=_2.proxy;
  17. var _5=e.data;
  18. var _6=_5.startLeft+e.pageX-_5.startX;
  19. var _7=_5.startTop+e.pageY-_5.startY;
  20. if(_4){
  21. if(_4.parent()[0]==document.body){
  22. if(_3.deltaX!=null&&_3.deltaX!=undefined){
  23. _6=e.pageX+_3.deltaX;
  24. }else{
  25. _6=e.pageX-e.data.offsetWidth;
  26. }
  27. if(_3.deltaY!=null&&_3.deltaY!=undefined){
  28. _7=e.pageY+_3.deltaY;
  29. }else{
  30. _7=e.pageY-e.data.offsetHeight;
  31. }
  32. }else{
  33. if(_3.deltaX!=null&&_3.deltaX!=undefined){
  34. _6+=e.data.offsetWidth+_3.deltaX;
  35. }
  36. if(_3.deltaY!=null&&_3.deltaY!=undefined){
  37. _7+=e.data.offsetHeight+_3.deltaY;
  38. }
  39. }
  40. }
  41. if(e.data.parent!=document.body){
  42. _6+=$(e.data.parent).scrollLeft();
  43. _7+=$(e.data.parent).scrollTop();
  44. }
  45. if(_3.axis=="h"){
  46. _5.left=_6;
  47. }else{
  48. if(_3.axis=="v"){
  49. _5.top=_7;
  50. }else{
  51. _5.left=_6;
  52. _5.top=_7;
  53. }
  54. }
  55. };
  56. function _8(e){
  57. var _9=$.data(e.data.target,"draggable");
  58. var _a=_9.options;
  59. var _b=_9.proxy;
  60. if(!_b){
  61. _b=$(e.data.target);
  62. }
  63. _b.css({left:e.data.left,top:e.data.top});
  64. $("body").css("cursor",_a.cursor);
  65. };
  66. function _c(e){
  67. $.fn.draggable.isDragging=true;
  68. var _d=$.data(e.data.target,"draggable");
  69. var _e=_d.options;
  70. var _f=$(".droppable").filter(function(){
  71. return e.data.target!=this;
  72. }).filter(function(){
  73. var _10=$.data(this,"droppable").options.accept;
  74. if(_10){
  75. return $(_10).filter(function(){
  76. return this==e.data.target;
  77. }).length>0;
  78. }else{
  79. return true;
  80. }
  81. });
  82. _d.droppables=_f;
  83. var _11=_d.proxy;
  84. if(!_11){
  85. if(_e.proxy){
  86. if(_e.proxy=="clone"){
  87. _11=$(e.data.target).clone().insertAfter(e.data.target);
  88. }else{
  89. _11=_e.proxy.call(e.data.target,e.data.target);
  90. }
  91. _d.proxy=_11;
  92. }else{
  93. _11=$(e.data.target);
  94. }
  95. }
  96. _11.css("position","absolute");
  97. _1(e);
  98. _8(e);
  99. _e.onStartDrag.call(e.data.target,e);
  100. return false;
  101. };
  102. function _12(e){
  103. var _13=$.data(e.data.target,"draggable");
  104. _1(e);
  105. if(_13.options.onDrag.call(e.data.target,e)!=false){
  106. _8(e);
  107. }
  108. var _14=e.data.target;
  109. _13.droppables.each(function(){
  110. var _15=$(this);
  111. if(_15.droppable("options").disabled){
  112. return;
  113. }
  114. var p2=_15.offset();
  115. if(e.pageX>p2.left&&e.pageX<p2.left+_15.outerWidth()&&e.pageY>p2.top&&e.pageY<p2.top+_15.outerHeight()){
  116. if(!this.entered){
  117. $(this).trigger("_dragenter",[_14]);
  118. this.entered=true;
  119. }
  120. $(this).trigger("_dragover",[_14]);
  121. }else{
  122. if(this.entered){
  123. $(this).trigger("_dragleave",[_14]);
  124. this.entered=false;
  125. }
  126. }
  127. });
  128. return false;
  129. };
  130. function _16(e){
  131. $.fn.draggable.isDragging=false;
  132. _12(e);
  133. var _17=$.data(e.data.target,"draggable");
  134. var _18=_17.proxy;
  135. var _19=_17.options;
  136. if(_19.revert){
  137. if(_1a()==true){
  138. $(e.data.target).css({position:e.data.startPosition,left:e.data.startLeft,top:e.data.startTop});
  139. }else{
  140. if(_18){
  141. var _1b,top;
  142. if(_18.parent()[0]==document.body){
  143. _1b=e.data.startX-e.data.offsetWidth;
  144. top=e.data.startY-e.data.offsetHeight;
  145. }else{
  146. _1b=e.data.startLeft;
  147. top=e.data.startTop;
  148. }
  149. _18.animate({left:_1b,top:top},function(){
  150. _1c();
  151. });
  152. }else{
  153. $(e.data.target).animate({left:e.data.startLeft,top:e.data.startTop},function(){
  154. $(e.data.target).css("position",e.data.startPosition);
  155. });
  156. }
  157. }
  158. }else{
  159. $(e.data.target).css({position:"absolute",left:e.data.left,top:e.data.top});
  160. _1a();
  161. }
  162. _19.onStopDrag.call(e.data.target,e);
  163. $(document).unbind(".draggable");
  164. setTimeout(function(){
  165. $("body").css("cursor","");
  166. },100);
  167. function _1c(){
  168. if(_18){
  169. _18.remove();
  170. }
  171. _17.proxy=null;
  172. };
  173. function _1a(){
  174. var _1d=false;
  175. _17.droppables.each(function(){
  176. var _1e=$(this);
  177. if(_1e.droppable("options").disabled){
  178. return;
  179. }
  180. var p2=_1e.offset();
  181. if(e.pageX>p2.left&&e.pageX<p2.left+_1e.outerWidth()&&e.pageY>p2.top&&e.pageY<p2.top+_1e.outerHeight()){
  182. if(_19.revert){
  183. $(e.data.target).css({position:e.data.startPosition,left:e.data.startLeft,top:e.data.startTop});
  184. }
  185. $(this).trigger("_drop",[e.data.target]);
  186. _1c();
  187. _1d=true;
  188. this.entered=false;
  189. return false;
  190. }
  191. });
  192. if(!_1d&&!_19.revert){
  193. _1c();
  194. }
  195. return _1d;
  196. };
  197. return false;
  198. };
  199. $.fn.draggable=function(_1f,_20){
  200. if(typeof _1f=="string"){
  201. return $.fn.draggable.methods[_1f](this,_20);
  202. }
  203. return this.each(function(){
  204. var _21;
  205. var _22=$.data(this,"draggable");
  206. if(_22){
  207. _22.handle.unbind(".draggable");
  208. _21=$.extend(_22.options,_1f);
  209. }else{
  210. _21=$.extend({},$.fn.draggable.defaults,$.fn.draggable.parseOptions(this),_1f||{});
  211. }
  212. var _23=_21.handle?(typeof _21.handle=="string"?$(_21.handle,this):_21.handle):$(this);
  213. $.data(this,"draggable",{options:_21,handle:_23});
  214. if(_21.disabled){
  215. $(this).css("cursor","");
  216. return;
  217. }
  218. _23.unbind(".draggable").bind("mousemove.draggable",{target:this},function(e){
  219. if($.fn.draggable.isDragging){
  220. return;
  221. }
  222. var _24=$.data(e.data.target,"draggable").options;
  223. if(_25(e)){
  224. $(this).css("cursor",_24.cursor);
  225. }else{
  226. $(this).css("cursor","");
  227. }
  228. }).bind("mouseleave.draggable",{target:this},function(e){
  229. $(this).css("cursor","");
  230. }).bind("mousedown.draggable",{target:this},function(e){
  231. if(_25(e)==false){
  232. return;
  233. }
  234. $(this).css("cursor","");
  235. var _26=$(e.data.target).position();
  236. var _27=$(e.data.target).offset();
  237. var _28={startPosition:$(e.data.target).css("position"),startLeft:_26.left,startTop:_26.top,left:_26.left,top:_26.top,startX:e.pageX,startY:e.pageY,offsetWidth:(e.pageX-_27.left),offsetHeight:(e.pageY-_27.top),target:e.data.target,parent:$(e.data.target).parent()[0]};
  238. $.extend(e.data,_28);
  239. var _29=$.data(e.data.target,"draggable").options;
  240. if(_29.onBeforeDrag.call(e.data.target,e)==false){
  241. return;
  242. }
  243. $(document).bind("mousedown.draggable",e.data,_c);
  244. $(document).bind("mousemove.draggable",e.data,_12);
  245. $(document).bind("mouseup.draggable",e.data,_16);
  246. });
  247. function _25(e){
  248. var _2a=$.data(e.data.target,"draggable");
  249. var _2b=_2a.handle;
  250. var _2c=$(_2b).offset();
  251. var _2d=$(_2b).outerWidth();
  252. var _2e=$(_2b).outerHeight();
  253. var t=e.pageY-_2c.top;
  254. var r=_2c.left+_2d-e.pageX;
  255. var b=_2c.top+_2e-e.pageY;
  256. var l=e.pageX-_2c.left;
  257. return Math.min(t,r,b,l)>_2a.options.edge;
  258. };
  259. });
  260. };
  261. $.fn.draggable.methods={options:function(jq){
  262. return $.data(jq[0],"draggable").options;
  263. },proxy:function(jq){
  264. return $.data(jq[0],"draggable").proxy;
  265. },enable:function(jq){
  266. return jq.each(function(){
  267. $(this).draggable({disabled:false});
  268. });
  269. },disable:function(jq){
  270. return jq.each(function(){
  271. $(this).draggable({disabled:true});
  272. });
  273. }};
  274. $.fn.draggable.parseOptions=function(_2f){
  275. var t=$(_2f);
  276. return $.extend({},$.parser.parseOptions(_2f,["cursor","handle","axis",{"revert":"boolean","deltaX":"number","deltaY":"number","edge":"number"}]),{disabled:(t.attr("disabled")?true:undefined)});
  277. };
  278. $.fn.draggable.defaults={proxy:null,revert:false,cursor:"move",deltaX:null,deltaY:null,handle:null,disabled:false,edge:0,axis:null,onBeforeDrag:function(e){
  279. },onStartDrag:function(e){
  280. },onDrag:function(e){
  281. },onStopDrag:function(e){
  282. }};
  283. $.fn.draggable.isDragging=false;
  284. })(jQuery);