jquery.draggable.js 7.3 KB

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