dragWithOther.html 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  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.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 MoveTest = {
  16. errorMsg: "放错了...请选择正确的类别!",
  17. curTarget: null,
  18. curTmpTarget: null,
  19. noSel: function() {
  20. try {
  21. window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
  22. } catch(e){}
  23. },
  24. dragTree2Dom: function(treeId, treeNodes) {
  25. return !treeNodes[0].isParent;
  26. },
  27. prevTree: function(treeId, treeNodes, targetNode) {
  28. return !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;
  29. },
  30. nextTree: function(treeId, treeNodes, targetNode) {
  31. return !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;
  32. },
  33. innerTree: function(treeId, treeNodes, targetNode) {
  34. return targetNode!=null && targetNode.isParent && targetNode.tId == treeNodes[0].parentTId;
  35. },
  36. dragMove: function(e, treeId, treeNodes) {
  37. var p = null, pId = 'dom_' + treeNodes[0].pId;
  38. if (e.target.id == pId) {
  39. p = $(e.target);
  40. } else {
  41. p = $(e.target).parent('#' + pId);
  42. if (!p.get(0)) {
  43. p = null;
  44. }
  45. }
  46. $('.domBtnDiv .active').removeClass('active');
  47. if (p) {
  48. p.addClass('active');
  49. }
  50. },
  51. dropTree2Dom: function(e, treeId, treeNodes, targetNode, moveType) {
  52. var domId = "dom_" + treeNodes[0].getParentNode().id;
  53. if (moveType == null && (domId == e.target.id || $(e.target).parents("#" + domId).length > 0)) {
  54. var zTree = $.fn.zTree.getZTreeObj("treeDemo");
  55. zTree.removeNode(treeNodes[0]);
  56. var newDom = $("span[domId=" + treeNodes[0].id + "]");
  57. if (newDom.length > 0) {
  58. newDom.removeClass("domBtn_Disabled");
  59. newDom.addClass("domBtn");
  60. } else {
  61. $("#" + domId).append("<span class='domBtn' domId='" + treeNodes[0].id + "'>" + treeNodes[0].name + "</span>");
  62. }
  63. MoveTest.updateType();
  64. } else if ( $(e.target).parents(".domBtnDiv").length > 0) {
  65. alert(MoveTest.errorMsg);
  66. }
  67. },
  68. dom2Tree: function(e, treeId, treeNode) {
  69. var target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;
  70. if (!target) return;
  71. var zTree = $.fn.zTree.getZTreeObj("treeDemo"), parentNode;
  72. if (treeNode != null && treeNode.isParent && "dom_" + treeNode.id == target.parent().attr("id")) {
  73. parentNode = treeNode;
  74. } else if (treeNode != null && !treeNode.isParent && "dom_" + treeNode.getParentNode().id == target.parent().attr("id")) {
  75. parentNode = treeNode.getParentNode();
  76. }
  77. if (tmpTarget) tmpTarget.remove();
  78. if (!!parentNode) {
  79. var nodes = zTree.addNodes(parentNode, {id:target.attr("domId"), name: target.text()});
  80. zTree.selectNode(nodes[0]);
  81. } else {
  82. target.removeClass("domBtn_Disabled");
  83. target.addClass("domBtn");
  84. alert(MoveTest.errorMsg);
  85. }
  86. MoveTest.updateType();
  87. MoveTest.curTarget = null;
  88. MoveTest.curTmpTarget = null;
  89. },
  90. updateType: function() {
  91. var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
  92. nodes = zTree.getNodes();
  93. for (var i=0, l=nodes.length; i<l; i++) {
  94. var num = nodes[i].children ? nodes[i].children.length : 0;
  95. nodes[i].name = nodes[i].name.replace(/ \(.*\)/gi, "") + " (" + num + ")";
  96. zTree.updateNode(nodes[i]);
  97. }
  98. },
  99. bindDom: function() {
  100. $(".domBtnDiv").bind("mousedown", MoveTest.bindMouseDown);
  101. },
  102. bindMouseDown: function(e) {
  103. var target = e.target;
  104. if (target!=null && target.className=="domBtn") {
  105. var doc = $(document), target = $(target),
  106. docScrollTop = doc.scrollTop(),
  107. docScrollLeft = doc.scrollLeft();
  108. target.addClass("domBtn_Disabled");
  109. target.removeClass("domBtn");
  110. curDom = $("<span class='dom_tmp domBtn'>" + target.text() + "</span>");
  111. curDom.appendTo("body");
  112. curDom.css({
  113. "top": (e.clientY + docScrollTop + 3) + "px",
  114. "left": (e.clientX + docScrollLeft + 3) + "px"
  115. });
  116. MoveTest.curTarget = target;
  117. MoveTest.curTmpTarget = curDom;
  118. doc.bind("mousemove", MoveTest.bindMouseMove);
  119. doc.bind("mouseup", MoveTest.bindMouseUp);
  120. doc.bind("selectstart", MoveTest.docSelect);
  121. }
  122. if(e.preventDefault) {
  123. e.preventDefault();
  124. }
  125. },
  126. bindMouseMove: function(e) {
  127. MoveTest.noSel();
  128. var doc = $(document),
  129. docScrollTop = doc.scrollTop(),
  130. docScrollLeft = doc.scrollLeft(),
  131. tmpTarget = MoveTest.curTmpTarget;
  132. if (tmpTarget) {
  133. tmpTarget.css({
  134. "top": (e.clientY + docScrollTop + 3) + "px",
  135. "left": (e.clientX + docScrollLeft + 3) + "px"
  136. });
  137. }
  138. return false;
  139. },
  140. bindMouseUp: function(e) {
  141. var doc = $(document);
  142. doc.unbind("mousemove", MoveTest.bindMouseMove);
  143. doc.unbind("mouseup", MoveTest.bindMouseUp);
  144. doc.unbind("selectstart", MoveTest.docSelect);
  145. var target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;
  146. if (tmpTarget) tmpTarget.remove();
  147. if ($(e.target).parents("#treeDemo").length == 0) {
  148. if (target) {
  149. target.removeClass("domBtn_Disabled");
  150. target.addClass("domBtn");
  151. }
  152. MoveTest.curTarget = null;
  153. MoveTest.curTmpTarget = null;
  154. }
  155. },
  156. bindSelect: function() {
  157. return false;
  158. }
  159. };
  160. var setting = {
  161. edit: {
  162. enable: true,
  163. showRemoveBtn: false,
  164. showRenameBtn: false,
  165. drag: {
  166. prev: MoveTest.prevTree,
  167. next: MoveTest.nextTree,
  168. inner: MoveTest.innerTree
  169. }
  170. },
  171. data: {
  172. keep: {
  173. parent: true,
  174. leaf: true
  175. },
  176. simpleData: {
  177. enable: true
  178. }
  179. },
  180. callback: {
  181. beforeDrag: MoveTest.dragTree2Dom,
  182. onDrop: MoveTest.dropTree2Dom,
  183. onDragMove: MoveTest.dragMove,
  184. onMouseUp: MoveTest.dom2Tree
  185. },
  186. view: {
  187. selectedMulti: false
  188. }
  189. };
  190. var zNodes =[
  191. { id:1, pId:0, name:"植物", isParent: true, open:true},
  192. { id:2, pId:0, name:"动物", isParent: true, open:true},
  193. { id:20, pId:2, name:"大象"},
  194. { id:29, pId:2, name:"鲨鱼"},
  195. { id:10, pId:1, name:"大白菜"},
  196. { id:19, pId:1, name:"西红柿"}
  197. ];
  198. $(document).ready(function(){
  199. $.fn.zTree.init($("#treeDemo"), setting, zNodes);
  200. MoveTest.updateType();
  201. MoveTest.bindDom();
  202. });
  203. //-->
  204. </SCRIPT>
  205. <style type="text/css">
  206. .dom_line {margin:2px;border-bottom:1px gray dotted;height:1px}
  207. .domBtnDiv {display:block;padding:2px;border:1px gray dotted;background-color:powderblue}
  208. .categoryDiv {display:inline-block; width:335px}
  209. .domBtn {display:inline-block;cursor:pointer;padding:2px;margin:2px 10px;border:1px gray solid;background-color:#FFE6B0}
  210. .domBtn_Disabled {display:inline-block;cursor:default;padding:2px;margin:2px 10px;border:1px gray solid;background-color:#DFDFDF;color:#999999}
  211. .dom_tmp {position:absolute;font-size:12px;}
  212. .active {background-color: #93C3CF}
  213. </style>
  214. </HEAD>
  215. <BODY>
  216. <h1>与其他 DOM 拖拽互动</h1>
  217. <h6>[ 文件路径: super/dragWithOther.html ]</h6>
  218. <div class="content_wrap">
  219. <div class="zTreeDemoBackground left">
  220. <ul id="treeDemo" class="ztree"></ul>
  221. </div>
  222. <div class="right">
  223. <ul class="info">
  224. <li class="title"><h2>实现方法说明</h2>
  225. <ul class="list">
  226. <li>zTree v3.2 版本修正了 onDrag/onDrop 中的 event 对象; v3.5.16 版本增加了 onDragMove; 因此可以较容易的控制将节点拖拽到其他 DOM </li>
  227. <li class="highlight_red">将其他 DOM 拖拽到 zTree 需要自己制作相关的拖拽代码</li>
  228. <li class="highlight_red">这仅仅是一个最简单的演示,如果需要更炫的效果,需要制作更复杂的代码</li>
  229. </ul>
  230. </li>
  231. <li class="title"><h2>请拖拽下面内容到 树节点上</h2>
  232. <div class="domBtnDiv">
  233. <div id="dom_1" class="categoryDiv"><span class="domBtn" domId="11">大树</span><span class="domBtn" domId="12">小草</span><span class="domBtn" domId="13">花朵</span></div>
  234. <div class="dom_line"></div>
  235. <div id="dom_2" class="categoryDiv"><span class="domBtn" domId="21">老虎</span><span class="domBtn" domId="22">狗熊</span><span class="domBtn" domId="23">狮子</span></div>
  236. </div>
  237. <span class="highlight_red">也可以把二级节点拖拽到以上图层 </span>
  238. </li>
  239. </ul>
  240. </div>
  241. </div>
  242. </BODY>
  243. </HTML>