idrop.js
上传用户:shjgzm
上传日期:2017-08-31
资源大小:2757k
文件大小:7k
源码类别:

Ajax

开发平台:

Java

  1. /**
  2.  * Interface Elements for jQuery
  3.  * Droppables
  4.  * 
  5.  * http://interface.eyecon.ro
  6.  * 
  7.  * Copyright (c) 2006 Stefan Petre
  8.  * Dual licensed under the MIT (MIT-LICENSE.txt) 
  9.  * and GPL (GPL-LICENSE.txt) licenses.
  10.  *   
  11.  *
  12.  */
  13. jQuery.iDrop = {
  14. fit : function (zonex, zoney, zonew, zoneh)
  15. {
  16. return  zonex <= jQuery.iDrag.dragged.dragCfg.nx && 
  17. (zonex + zonew) >= (jQuery.iDrag.dragged.dragCfg.nx + jQuery.iDrag.dragged.dragCfg.oC.w) &&
  18. zoney <= jQuery.iDrag.dragged.dragCfg.ny && 
  19. (zoney + zoneh) >= (jQuery.iDrag.dragged.dragCfg.ny + jQuery.iDrag.dragged.dragCfg.oC.h) ? true :false;
  20. },
  21. intersect : function (zonex, zoney, zonew, zoneh)
  22. {
  23. return  ! ( zonex > (jQuery.iDrag.dragged.dragCfg.nx + jQuery.iDrag.dragged.dragCfg.oC.w)
  24. || (zonex + zonew) < jQuery.iDrag.dragged.dragCfg.nx 
  25. || zoney > (jQuery.iDrag.dragged.dragCfg.ny + jQuery.iDrag.dragged.dragCfg.oC.h) 
  26. || (zoney + zoneh) < jQuery.iDrag.dragged.dragCfg.ny
  27. ) ? true :false;
  28. },
  29. pointer : function (zonex, zoney, zonew, zoneh)
  30. {
  31. return zonex < jQuery.iDrag.dragged.dragCfg.currentPointer.x
  32. && (zonex + zonew) > jQuery.iDrag.dragged.dragCfg.currentPointer.x 
  33. && zoney < jQuery.iDrag.dragged.dragCfg.currentPointer.y 
  34. && (zoney + zoneh) > jQuery.iDrag.dragged.dragCfg.currentPointer.y
  35. ? true :false;
  36. },
  37. overzone : false,
  38. highlighted : {},
  39. count : 0,
  40. zones : {},
  41. highlight : function (elm)
  42. {
  43. if (jQuery.iDrag.dragged == null) {
  44. return;
  45. }
  46. var i;
  47. jQuery.iDrop.highlighted = {};
  48. oneIsSortable = false;
  49. for (i in jQuery.iDrop.zones) {
  50. if (jQuery.iDrop.zones[i] != null) {
  51. iEL = jQuery.iDrop.zones[i].get(0);
  52. if (jQuery.className.has(jQuery.iDrag.dragged,iEL.dropCfg.a)) {
  53. if (iEL.dropCfg.m == false) {
  54. iEL.dropCfg.p = jQuery.extend(
  55. jQuery.iUtil.getPosition(iEL),
  56. jQuery.iUtil.getSize(iEL)
  57. );//jQuery.iUtil.getPos(iEL);
  58. iEL.dropCfg.m = true;
  59. }
  60. if (iEL.dropCfg.ac) {
  61. jQuery.iDrop.zones[i].addClass(iEL.dropCfg.ac);
  62. }
  63. jQuery.iDrop.highlighted[i] = jQuery.iDrop.zones[i];
  64. //if (jQuery.iSort && jQuery.iDrag.dragged.dragCfg.so) {
  65. if (jQuery.iSort && iEL.dropCfg.s == true) {
  66. iEL.dropCfg.el = jQuery('.' + iEL.dropCfg.a, iEL);
  67. elm.style.display = 'none';
  68. jQuery.iSort.measure(iEL);
  69. elm.style.display = elm.dragCfg.oD;
  70. oneIsSortable = true;
  71. }
  72. }
  73. }
  74. }
  75. //if (jQuery.iSort && jQuery.iDrag.dragged.dragCfg.so) {
  76. if (oneIsSortable) {
  77. jQuery.iSort.start();
  78. }
  79. },
  80. /**
  81.  * remeasure the droppable
  82.  * 
  83.  * useful when the positions/dimensions for droppables 
  84.  * are changed while dragging a element
  85.  * 
  86.  * this works for sortables too but with a greate processor 
  87.  * penality because remeasures each sort items too
  88.  */
  89. remeasure : function()
  90. {
  91. jQuery.iDrop.highlighted = {};
  92. for (i in jQuery.iDrop.zones) {
  93. if (jQuery.iDrop.zones[i] != null) {
  94. iEL = jQuery.iDrop.zones[i].get(0);
  95. if (jQuery.className.has(jQuery.iDrag.dragged,iEL.dropCfg.a)) {
  96. iEL.dropCfg.p = jQuery.extend(
  97. jQuery.iUtil.getPosition(iEL),
  98. jQuery.iUtil.getSize(iEL)
  99. );
  100. if (iEL.dropCfg.ac) {
  101. jQuery.iDrop.zones[i].addClass(iEL.dropCfg.ac);
  102. }
  103. jQuery.iDrop.highlighted[i] = jQuery.iDrop.zones[i];
  104. if (jQuery.iSort && iEL.dropCfg.s == true) {
  105. iEL.dropCfg.el = jQuery('.' + iEL.dropCfg.a, iEL);
  106. elm.style.display = 'none';
  107. jQuery.iSort.measure(iEL);
  108. elm.style.display = elm.dragCfg.oD;
  109. oneIsSortable = true;
  110. }
  111. }
  112. }
  113. }
  114. },
  115. checkhover : function (e)
  116. {
  117. if (jQuery.iDrag.dragged == null) {
  118. return;
  119. }
  120. jQuery.iDrop.overzone = false;
  121. var i;
  122. applyOnHover = false;
  123. for (i in jQuery.iDrop.highlighted)
  124. {
  125. iEL = jQuery.iDrop.highlighted[i].get(0);
  126. if ( 
  127. jQuery.iDrop.overzone == false
  128.  && 
  129.  jQuery.iDrop[iEL.dropCfg.t](
  130.   iEL.dropCfg.p.x, 
  131. iEL.dropCfg.p.y, 
  132. iEL.dropCfg.p.wb, 
  133. iEL.dropCfg.p.hb
  134. ) {
  135. if (iEL.dropCfg.hc && iEL.dropCfg.h == false) {
  136. jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.ac);
  137. jQuery.iDrop.highlighted[i].addClass(iEL.dropCfg.hc);
  138. }
  139. //chec if onHover function has to be called
  140. if (iEL.dropCfg.h == false &&iEL.dropCfg.onHover) {
  141. applyOnHover = true;
  142. }
  143. iEL.dropCfg.h = true;
  144. jQuery.iDrop.overzone = iEL;
  145. //if(jQuery.iSort && jQuery.iDrag.dragged.dragCfg.so) {
  146. if(jQuery.iSort && iEL.dropCfg.s == true) {
  147. jQuery.iSort.helper.get(0).className = iEL.dropCfg.shc;
  148. jQuery.iSort.checkhover(iEL);
  149. }
  150. } else {
  151. //onOut function
  152. if (iEL.dropCfg.onOut && iEL.dropCfg.h == true) {
  153. iEL.dropCfg.onOut.apply(iEL, [e, clonedEl, iEL.dropCfg.fx]);
  154. }
  155. if (iEL.dropCfg.hc) {
  156. jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.hc);
  157. jQuery.iDrop.highlighted[i].addClass(iEL.dropCfg.ac);
  158. }
  159. iEL.dropCfg.h = false;
  160. }
  161. }
  162. if (jQuery.iSort && jQuery.iDrop.overzone == false) {
  163. jQuery.iSort.helper.get(0).style.display = 'none';
  164. jQuery('body').append(jQuery.iSort.helper.get(0));
  165. }
  166. //call onhover
  167. if(applyOnHover) {
  168. jQuery.iDrop.overzone.dropCfg.onHover.apply(jQuery.iDrop.overzone, [e, clonedEl]);
  169. }
  170. },
  171. checkdrop : function (e)
  172. {
  173. var i;
  174. for (i in jQuery.iDrop.highlighted) {
  175. iEL = jQuery.iDrop.highlighted[i].get(0);
  176. if (iEL.dropCfg.ac) {
  177. jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.ac);
  178. }
  179. if (iEL.dropCfg.hc) {
  180. jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.hc);
  181. }
  182. if(iEL.dropCfg.s) {
  183. jQuery.iSort.changed[jQuery.iSort.changed.length] = i;
  184. }
  185. if (iEL.dropCfg.onDrop && iEL.dropCfg.h == true) {
  186. iEL.dropCfg.h = false;
  187. iEL.dropCfg.onDrop.apply(iEL, [e, iEL.dropCfg.fx]);
  188. }
  189. iEL.dropCfg.m = false;
  190. iEL.dropCfg.h  = false;
  191. }
  192. jQuery.iDrop.highlighted = {};
  193. },
  194. destroy : function()
  195. {
  196. return this.each(
  197. function()
  198. {
  199. if (this.isDroppable) {
  200. if (this.dropCfg.s) {
  201. id = jQuery.attr(this,'id');
  202. jQuery.iSort.collected[id] = null;
  203. jQuery('.' + this.dropCfg.a, this).DraggableDestroy();
  204. }
  205. jQuery.iDrop.zones['d' + this.idsa] = null;
  206. this.isDroppable = false;
  207. this.f = null;
  208. }
  209. }
  210. );
  211. },
  212. build : function (o)
  213. {
  214. return this.each(
  215. function()
  216. {
  217. if (this.isDroppable == true || !o.accept || !jQuery.iUtil || !jQuery.iDrag){
  218. return;
  219. }
  220. this.dropCfg = {
  221. a : o.accept,
  222. ac: o.activeclass, 
  223. hc: o.hoverclass,
  224. shc: o.helperclass,
  225. onDrop: o.ondrop||o.onDrop,
  226. onHover: o.onHover||o.onhover,
  227. onOut: o.onOut||o.onout,
  228. t: o.tolerance && ( o.tolerance == 'fit' || o.tolerance == 'intersect') ? o.tolerance : 'pointer',
  229. fx: o.fx ? o.fx : false,
  230. m: false,
  231. h: false
  232. };
  233. if (o.sortable == true && jQuery.iSort) {
  234. id = jQuery.attr(this,'id');
  235. jQuery.iSort.collected[id] = this.dropCfg.a;
  236. this.dropCfg.s = true;
  237. if(o.onchange) {
  238. this.dropCfg.onchange = o.onchange;
  239. this.dropCfg.os = jQuery.iSort.serialize(id).hash;
  240. }
  241. }
  242. this.isDroppable = true;
  243. this.idsa = parseInt(Math.random() * 10000);
  244. jQuery.iDrop.zones['d' + this.idsa] = jQuery(this);
  245. jQuery.iDrop.count ++;
  246. }
  247. );
  248. }
  249. };
  250. jQuery.fn.extend(
  251. {
  252. DroppableDestroy : jQuery.iDrop.destroy,
  253. Droppable : jQuery.iDrop.build
  254. }
  255. );
  256. jQuery.recallDroppables = jQuery.iDrop.remeasure;