drag_super.html 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <!DOCTYPE html>
  2. <HTML>
  3. <HEAD>
  4. <TITLE> ZTREE DEMO - beforeDrag / onDrag / beforeDrop / onDrop</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.min.js"></script>
  9. <!-- <script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>-->
  10. <script type="text/javascript" src="../../../js/jquery.ztree.core.js"></script>
  11. <script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>
  12. <script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>
  13. <SCRIPT type="text/javascript">
  14. <!--
  15. var setting = {
  16. edit: {
  17. drag: {
  18. autoExpandTrigger: true,
  19. prev: dropPrev,
  20. inner: dropInner,
  21. next: dropNext
  22. },
  23. enable: true,
  24. showRemoveBtn: false,
  25. showRenameBtn: false
  26. },
  27. data: {
  28. simpleData: {
  29. enable: true
  30. }
  31. },
  32. callback: {
  33. beforeDrag: beforeDrag,
  34. beforeDrop: beforeDrop,
  35. beforeDragOpen: beforeDragOpen,
  36. onDrag: onDrag,
  37. onDrop: onDrop,
  38. onExpand: onExpand
  39. }
  40. };
  41. var zNodes =[
  42. { id:1, pId:0, name:"can drag 1", open:true},
  43. { id:11, pId:1, name:"can drag 1-1"},
  44. { id:12, pId:1, name:"can drag 1-2"},
  45. { id:121, pId:12, name:"can drag 1-2-1"},
  46. { id:122, pId:12, name:"can drag 1-2-2"},
  47. { id:123, pId:12, name:"can drag 1-2-3"},
  48. { id:13, pId:1, name:"can't drag 1-3", open:true, drag:false},
  49. { id:131, pId:13, name:"can't drag 1-3-1", drag:false},
  50. { id:132, pId:13, name:"can't drag 1-3-2", drag:false},
  51. { id:132, pId:13, name:"can't drag 1-3-3", drag:false},
  52. { id:2, pId:0, name:"can't drag my child out 2", open:true, childOuter:false},
  53. { id:21, pId:2, name:"can't be parent 2-1", dropInner:false},
  54. { id:22, pId:2, name:"can't be root 2-2", dropRoot:false},
  55. { id:23, pId:2, name:"try to drag me 2-3"},
  56. { id:3, pId:0, name:"can't add/sort my child 3", open:true, childOrder:false, dropInner:false},
  57. { id:31, pId:3, name:"can drag 3-1"},
  58. { id:32, pId:3, name:"can drag 3-2"},
  59. { id:33, pId:3, name:"can drag 3-3"}
  60. ];
  61. function dropPrev(treeId, nodes, targetNode) {
  62. var pNode = targetNode.getParentNode();
  63. if (pNode && pNode.dropInner === false) {
  64. return false;
  65. } else {
  66. for (var i=0,l=curDragNodes.length; i<l; i++) {
  67. var curPNode = curDragNodes[i].getParentNode();
  68. if (curPNode && curPNode !== targetNode.getParentNode() && curPNode.childOuter === false) {
  69. return false;
  70. }
  71. }
  72. }
  73. return true;
  74. }
  75. function dropInner(treeId, nodes, targetNode) {
  76. if (targetNode && targetNode.dropInner === false) {
  77. return false;
  78. } else {
  79. for (var i=0,l=curDragNodes.length; i<l; i++) {
  80. if (!targetNode && curDragNodes[i].dropRoot === false) {
  81. return false;
  82. } else if (curDragNodes[i].parentTId && curDragNodes[i].getParentNode() !== targetNode && curDragNodes[i].getParentNode().childOuter === false) {
  83. return false;
  84. }
  85. }
  86. }
  87. return true;
  88. }
  89. function dropNext(treeId, nodes, targetNode) {
  90. var pNode = targetNode.getParentNode();
  91. if (pNode && pNode.dropInner === false) {
  92. return false;
  93. } else {
  94. for (var i=0,l=curDragNodes.length; i<l; i++) {
  95. var curPNode = curDragNodes[i].getParentNode();
  96. if (curPNode && curPNode !== targetNode.getParentNode() && curPNode.childOuter === false) {
  97. return false;
  98. }
  99. }
  100. }
  101. return true;
  102. }
  103. var log, className = "dark", curDragNodes, autoExpandNode;
  104. function beforeDrag(treeId, treeNodes) {
  105. className = (className === "dark" ? "":"dark");
  106. showLog("[ "+getTime()+" beforeDrag ]&nbsp;&nbsp;&nbsp;&nbsp; drag: " + treeNodes.length + " nodes." );
  107. for (var i=0,l=treeNodes.length; i<l; i++) {
  108. if (treeNodes[i].drag === false) {
  109. curDragNodes = null;
  110. return false;
  111. } else if (treeNodes[i].parentTId && treeNodes[i].getParentNode().childDrag === false) {
  112. curDragNodes = null;
  113. return false;
  114. }
  115. }
  116. curDragNodes = treeNodes;
  117. return true;
  118. }
  119. function beforeDragOpen(treeId, treeNode) {
  120. autoExpandNode = treeNode;
  121. return true;
  122. }
  123. function beforeDrop(treeId, treeNodes, targetNode, moveType, isCopy) {
  124. className = (className === "dark" ? "":"dark");
  125. showLog("[ "+getTime()+" beforeDrop ]&nbsp;&nbsp;&nbsp;&nbsp; moveType:" + moveType);
  126. showLog("target: " + (targetNode ? targetNode.name : "root") + " -- is "+ (isCopy==null? "cancel" : isCopy ? "copy" : "move"));
  127. return true;
  128. }
  129. function onDrag(event, treeId, treeNodes) {
  130. className = (className === "dark" ? "":"dark");
  131. showLog("[ "+getTime()+" onDrag ]&nbsp;&nbsp;&nbsp;&nbsp; drag: " + treeNodes.length + " nodes." );
  132. }
  133. function onDrop(event, treeId, treeNodes, targetNode, moveType, isCopy) {
  134. className = (className === "dark" ? "":"dark");
  135. showLog("[ "+getTime()+" onDrop ]&nbsp;&nbsp;&nbsp;&nbsp; moveType:" + moveType);
  136. showLog("target: " + (targetNode ? targetNode.name : "root") + " -- is "+ (isCopy==null? "cancel" : isCopy ? "copy" : "move"))
  137. }
  138. function onExpand(event, treeId, treeNode) {
  139. if (treeNode === autoExpandNode) {
  140. className = (className === "dark" ? "":"dark");
  141. showLog("[ "+getTime()+" onExpand ]&nbsp;&nbsp;&nbsp;&nbsp;" + treeNode.name);
  142. }
  143. }
  144. function showLog(str) {
  145. if (!log) log = $("#log");
  146. log.append("<li class='"+className+"'>"+str+"</li>");
  147. if(log.children("li").length > 8) {
  148. log.get(0).removeChild(log.children("li")[0]);
  149. }
  150. }
  151. function getTime() {
  152. var now= new Date(),
  153. h=now.getHours(),
  154. m=now.getMinutes(),
  155. s=now.getSeconds(),
  156. ms=now.getMilliseconds();
  157. return (h+":"+m+":"+s+ " " +ms);
  158. }
  159. function setTrigger() {
  160. var zTree = $.fn.zTree.getZTreeObj("treeDemo");
  161. zTree.setting.edit.drag.autoExpandTrigger = $("#callbackTrigger").attr("checked");
  162. }
  163. $(document).ready(function(){
  164. $.fn.zTree.init($("#treeDemo"), setting, zNodes);
  165. $("#callbackTrigger").bind("change", {}, setTrigger);
  166. });
  167. //-->
  168. </SCRIPT>
  169. </HEAD>
  170. <BODY>
  171. <h1>Advanced Drag Node Operation</h1>
  172. <h6>[ File Path: exedit/drag_super.html ]</h6>
  173. <div class="content_wrap">
  174. <div class="zTreeDemoBackground left">
  175. <ul id="treeDemo" class="ztree"></ul>
  176. </div>
  177. <div class="right">
  178. <ul class="info">
  179. <li class="title"><h2>1, 'beforeDrag / onDrag'<br/>&nbsp;&nbsp;'beforeDrop / onDrop' callback function</h2>
  180. <ul class="list">
  181. <li>This Demo shows the configuration parameters to achieve a more flexible use of drag and drop rules, the operation can be compared with "Normal Drag Node Operation" example.</li>
  182. <li>This Demo default allows copy & move.</li>
  183. <li class="highlight_red">This Demo set 'setting.edit.drag.prev / inner / next' as 'function', you can dynamically set according to the node, which can not use beforeDrop callback function, the effect of drag and drop will be better.</li>
  184. <li><p><span class="highlight_red">After be familiar with these configurations, I think you can design a more flexible and rational rules!</span><br/>
  185. &nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" id="callbackTrigger" checked /> 拖拽节点时自动展开父节点是否触发 callback<br/>
  186. drag / drop log:<br/>
  187. <ul id="log" class="log"></ul></p></li>
  188. </ul>
  189. </li>
  190. <li class="title"><h2>2, Explanation of setting</h2>
  191. <ul class="list">
  192. <li>Same as 'Normal Drag Node Operation'</li>
  193. </ul>
  194. </li>
  195. <li class="title"><h2>3, Explanation of treeNode</h2>
  196. <ul class="list">
  197. <li>Same as 'Normal Drag Node Operation'</li>
  198. </ul>
  199. </li>
  200. </ul>
  201. </div>
  202. </div>
  203. </BODY>
  204. </HTML>