dragWithOther.html 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <!DOCTYPE html>
  2. <HTML>
  3. <HEAD>
  4. <TITLE> ZTREE DEMO - drag with other DOM</TITLE>
  5. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  6. <link rel="stylesheet" href="../../../css/demo.css" type="text/css">
  7. <link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">
  8. <script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
  9. <script type="text/javascript" src="../../../js/jquery.ztree.core.js"></script>
  10. <!--<script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>-->
  11. <script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>
  12. <SCRIPT type="text/javascript">
  13. <!--
  14. var MoveTest = {
  15. errorMsg: "Error!...Please drag it to the correct category!",
  16. curTarget: null,
  17. curTmpTarget: null,
  18. noSel: function() {
  19. try {
  20. window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
  21. } catch(e){}
  22. },
  23. dragTree2Dom: function(treeId, treeNodes) {
  24. return !treeNodes[0].isParent;
  25. },
  26. prevTree: function(treeId, treeNodes, targetNode) {
  27. return !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;
  28. },
  29. nextTree: function(treeId, treeNodes, targetNode) {
  30. return !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;
  31. },
  32. innerTree: function(treeId, treeNodes, targetNode) {
  33. return targetNode!=null && targetNode.isParent && targetNode.tId == treeNodes[0].parentTId;
  34. },
  35. dragMove: function(e, treeId, treeNodes) {
  36. var p = null, pId = 'dom_' + treeNodes[0].pId;
  37. if (e.target.id == pId) {
  38. p = $(e.target);
  39. } else {
  40. p = $(e.target).parent('#' + pId);
  41. if (!p.get(0)) {
  42. p = null;
  43. }
  44. }
  45. $('.domBtnDiv .active').removeClass('active');
  46. if (p) {
  47. p.addClass('active');
  48. }
  49. },
  50. dropTree2Dom: function(e, treeId, treeNodes, targetNode, moveType) {
  51. var domId = "dom_" + treeNodes[0].getParentNode().id;
  52. if (moveType == null && (domId == e.target.id || $(e.target).parents("#" + domId).length > 0)) {
  53. var zTree = $.fn.zTree.getZTreeObj("treeDemo");
  54. zTree.removeNode(treeNodes[0]);
  55. var newDom = $("span[domId=" + treeNodes[0].id + "]");
  56. if (newDom.length > 0) {
  57. newDom.removeClass("domBtn_Disabled");
  58. newDom.addClass("domBtn");
  59. } else {
  60. $("#" + domId).append("<span class='domBtn' domId='" + treeNodes[0].id + "'>" + treeNodes[0].name + "</span>");
  61. }
  62. MoveTest.updateType();
  63. } else if ( $(e.target).parents(".domBtnDiv").length > 0) {
  64. alert(MoveTest.errorMsg);
  65. }
  66. },
  67. dom2Tree: function(e, treeId, treeNode) {
  68. var target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;
  69. if (!target) return;
  70. var zTree = $.fn.zTree.getZTreeObj("treeDemo"), parentNode;
  71. if (treeNode != null && treeNode.isParent && "dom_" + treeNode.id == target.parent().attr("id")) {
  72. parentNode = treeNode;
  73. } else if (treeNode != null && !treeNode.isParent && "dom_" + treeNode.getParentNode().id == target.parent().attr("id")) {
  74. parentNode = treeNode.getParentNode();
  75. }
  76. if (tmpTarget) tmpTarget.remove();
  77. if (!!parentNode) {
  78. var nodes = zTree.addNodes(parentNode, {id:target.attr("domId"), name: target.text()});
  79. zTree.selectNode(nodes[0]);
  80. } else {
  81. target.removeClass("domBtn_Disabled");
  82. target.addClass("domBtn");
  83. alert(MoveTest.errorMsg);
  84. }
  85. MoveTest.updateType();
  86. MoveTest.curTarget = null;
  87. MoveTest.curTmpTarget = null;
  88. },
  89. updateType: function() {
  90. var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
  91. nodes = zTree.getNodes();
  92. for (var i=0, l=nodes.length; i<l; i++) {
  93. var num = nodes[i].children ? nodes[i].children.length : 0;
  94. nodes[i].name = nodes[i].name.replace(/ \(.*\)/gi, "") + " (" + num + ")";
  95. zTree.updateNode(nodes[i]);
  96. }
  97. },
  98. bindDom: function() {
  99. $(".domBtnDiv").bind("mousedown", MoveTest.bindMouseDown);
  100. },
  101. bindMouseDown: function(e) {
  102. var target = e.target;
  103. if (target!=null && target.className=="domBtn") {
  104. var doc = $(document), target = $(target),
  105. docScrollTop = doc.scrollTop(),
  106. docScrollLeft = doc.scrollLeft();
  107. target.addClass("domBtn_Disabled");
  108. target.removeClass("domBtn");
  109. curDom = $("<span class='dom_tmp domBtn'>" + target.text() + "</span>");
  110. curDom.appendTo("body");
  111. curDom.css({
  112. "top": (e.clientY + docScrollTop + 3) + "px",
  113. "left": (e.clientX + docScrollLeft + 3) + "px"
  114. });
  115. MoveTest.curTarget = target;
  116. MoveTest.curTmpTarget = curDom;
  117. doc.bind("mousemove", MoveTest.bindMouseMove);
  118. doc.bind("mouseup", MoveTest.bindMouseUp);
  119. doc.bind("selectstart", MoveTest.docSelect);
  120. }
  121. if(e.preventDefault) {
  122. e.preventDefault();
  123. }
  124. },
  125. bindMouseMove: function(e) {
  126. MoveTest.noSel();
  127. var doc = $(document),
  128. docScrollTop = doc.scrollTop(),
  129. docScrollLeft = doc.scrollLeft(),
  130. tmpTarget = MoveTest.curTmpTarget;
  131. if (tmpTarget) {
  132. tmpTarget.css({
  133. "top": (e.clientY + docScrollTop + 3) + "px",
  134. "left": (e.clientX + docScrollLeft + 3) + "px"
  135. });
  136. }
  137. return false;
  138. },
  139. bindMouseUp: function(e) {
  140. var doc = $(document);
  141. doc.unbind("mousemove", MoveTest.bindMouseMove);
  142. doc.unbind("mouseup", MoveTest.bindMouseUp);
  143. doc.unbind("selectstart", MoveTest.docSelect);
  144. var target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;
  145. if (tmpTarget) tmpTarget.remove();
  146. if ($(e.target).parents("#treeDemo").length == 0) {
  147. if (target) {
  148. target.removeClass("domBtn_Disabled");
  149. target.addClass("domBtn");
  150. }
  151. MoveTest.curTarget = null;
  152. MoveTest.curTmpTarget = null;
  153. }
  154. },
  155. bindSelect: function() {
  156. return false;
  157. }
  158. };
  159. var setting = {
  160. edit: {
  161. enable: true,
  162. showRemoveBtn: false,
  163. showRenameBtn: false,
  164. drag: {
  165. prev: MoveTest.prevTree,
  166. next: MoveTest.nextTree,
  167. inner: MoveTest.innerTree
  168. }
  169. },
  170. data: {
  171. keep: {
  172. parent: true,
  173. leaf: true
  174. },
  175. simpleData: {
  176. enable: true
  177. }
  178. },
  179. callback: {
  180. beforeDrag: MoveTest.dragTree2Dom,
  181. onDrop: MoveTest.dropTree2Dom,
  182. onDragMove: MoveTest.dragMove,
  183. onMouseUp: MoveTest.dom2Tree
  184. },
  185. view: {
  186. selectedMulti: false
  187. }
  188. };
  189. var zNodes =[
  190. { id:1, pId:0, name:"PLANT", isParent: true, open:true},
  191. { id:2, pId:0, name:"ANIMAL", isParent: true, open:true},
  192. { id:20, pId:2, name:"Elephant"},
  193. { id:29, pId:2, name:"Shark"},
  194. { id:10, pId:1, name:"Cabbage"},
  195. { id:19, pId:1, name:"Tomato"}
  196. ];
  197. $(document).ready(function(){
  198. $.fn.zTree.init($("#treeDemo"), setting, zNodes);
  199. MoveTest.updateType();
  200. MoveTest.bindDom();
  201. });
  202. //-->
  203. </SCRIPT>
  204. <style type="text/css">
  205. .dom_line {margin:2px;border-bottom:1px gray dotted;height:1px}
  206. .domBtnDiv {display:block;padding:2px;border:1px gray dotted;background-color:powderblue}
  207. .categoryDiv {display:inline-block; width:335px}
  208. .domBtn {display:inline-block;cursor:pointer;padding:2px;margin:2px 10px;border:1px gray solid;background-color:#FFE6B0}
  209. .domBtn_Disabled {display:inline-block;cursor:default;padding:2px;margin:2px 10px;border:1px gray solid;background-color:#DFDFDF;color:#999999}
  210. .dom_tmp {position:absolute;font-size:12px;}
  211. .active {background-color: #93C3CF}
  212. </style>
  213. </HEAD>
  214. <BODY>
  215. <h1>Drag With Other DOMs</h1>
  216. <h6>[ File Path: super/dragWithOther.html ]</h6>
  217. <div class="content_wrap">
  218. <div class="zTreeDemoBackground left">
  219. <ul id="treeDemo" class="ztree"></ul>
  220. </div>
  221. <div class="right">
  222. <ul class="info">
  223. <li class="title"><h2>Explanation of implementation method</h2>
  224. <ul class="list">
  225. <li>zTree v3.2 modified the event object in onDrag/onDrop; v3.5.16 add the onDragMove callback, thus the nodes can be draged to other DOMs easily.</li>
  226. <li class="highlight_red">To drag other DOMS to zTree, you need to build the drag codes by yourself.</li>
  227. <li class="highlight_red">This is just a simple Demo. If you need more features, please build more complicated codes.</li>
  228. </ul>
  229. </li>
  230. <li class="title"><h2>Please drag and drop the following content to the tree node</h2>
  231. <div class="domBtnDiv">
  232. <div id="dom_1" class="categoryDiv"><span class="domBtn" domId="11">Tree</span><span class="domBtn" domId="12">Grass</span><span class="domBtn" domId="13">Flower</span></div>
  233. <div class="dom_line"></div>
  234. <div id="dom_2" class="categoryDiv"><span class="domBtn" domId="21">Tiger</span><span class="domBtn" domId="22">Bear</span><span class="domBtn" domId="23">Lion</span></div>
  235. </div>
  236. <span class="highlight_red">You can drag the nodes of level 2 to the above layer.</span>
  237. </li>
  238. </ul>
  239. </div>
  240. </div>
  241. </BODY>
  242. </HTML>