zoukankan      html  css  js  c++  java
  • javascript入门 之 zTree(十二 托拽事件(二))

    1.逻辑可能有不完善的地方,如果发现,请指出。
    
    <!DOCTYPE html>
    <HTML>
    <HEAD>
       <TITLE> ZTREE DEMO - drag & drop</TITLE>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <meta lang="zh">
        <script type="text/javascript" src="../js/jquery-3.3.1.js"></script>
        <link rel="stylesheet" href="../bower_components/ztree/css/zTreeStyle/demo.css" type="text/css">
        <link rel="stylesheet" href="../bower_components/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css">
        <script type="text/javascript" src="../bower_components/ztree/js/jquery-1.4.4.min.js"></script>
        <script type="text/javascript" src="../bower_components/ztree/js/jquery.ztree.core-3.5.js"></script>
        <script type="text/javascript" src="../bower_components/ztree/js/jquery.ztree.excheck-3.5.js"></script>
        <script type="text/javascript" src="../bower_components/ztree/js/jquery.ztree.exedit-3.5.js"></script>
       <SCRIPT type="text/javascript">
    
          var setting = {
             edit: {
                 drag:{
                        autoExpandTrigger: true,
                        prev: dropPrev,                               //拖拽到目标节点时,设置是否允许移动到目标节点前面的操作
                        next: dropNext,                               //拖拽到目标节点时,设置是否允许移动到目标节点后面的操作
                        inner: dropInner                              //拖拽到目标节点时,设置是否允许成为目标节点的子节点
                    },
                enable: true,
                showRemoveBtn: true,                                //设置是否显示删除按钮
                showRenameBtn: true                                 //设置是否显示编辑名称按钮
             },
             data: {
                simpleData: {
                   enable: true
                }
             },
             callback: {
                beforeDrag: beforeDrag,                             //用于捕获节点被拖拽之前的事件回调函数,并且根据返回值确定是否允许开启拖拽操作
                beforeDrop: beforeDrop,                             //用于捕获节点拖拽操作结束之前的事件回调函数,并且根据返回值确定是否允许此拖拽操作
                    onDrag: onDrag,                                     //侦听beforeDrag回调结果,确定是否允许drag
                    drop: onDrop                                        //侦听beforeDrop回调结果,确定是否允许drop
             }
          };
    
          var nodes =[
             { id:1, pId:0, name:"1", open:true,childOuter:false},                       //禁止子结点移走
                { id:13, pId:1, name:"1-3"},
                { id:11, pId:1, name:"1-1",dropInner:false},                                //不成为父结点
             { id:12, pId:1, name:"1-2", open:true,dropRoot:false},                      //不成为根结点
             { id:121, pId:12, name:"1-2-1"},
             { id:122, pId:12, name:"1-2-2"},
             { id:123, pId:12, name:"1-2-3"},
             { id:13, pId:1, name:"1-3", open:true, drag:false,childOrder:false,dropInner:false},        //不允许 被托拽/子结点排序/成为该结点 的子结点
             { id:131, pId:13, name:"1-3-1", drag:false},                                //不允许被托拽
             { id:132, pId:13, name:"1-3-2", drag:false},                                //不允许被托拽
             { id:133, pId:13, name:"1-3-3"},
             { id:2, pId:0, name:"2", open:true},
             { id:21, pId:2, name:"2-1"},
             { id:22, pId:2, name:"2-2", open:true, drop:false},                         //不允许托拽到此处
             { id:221, pId:22, name:"2-2-1"},
             { id:222, pId:22, name:"2-2-2"},
             { id:223, pId:22, name:"2-2-3"},
             { id:23, pId:2, name:"2-3"}
          ];
    
            function beforeDrag(treeId, treeNodes) {                                        //如果该结点不允许drag 或者 该结点的父结点不允许子结点外出,则返回false
    
                for (var i=0,l=treeNodes.length; i<l; i++) {
    
                    if (treeNodes[i].drag === false) {
    
                        alert('被托拽结点不允许操作');
                        return false;
                    }
                }
                alert('被托拽结点允许操作');
                return true;
            }
    
          function beforeDrop(treeId, treeNodes, targetNode, moveType) {                  //判断是否允许被托拽到此地
    
              alert('托拽事件检测中');
                return true;
          }
    
            function dropPrev(treeId, nodes, targetNode) {                                     //如果目标结点允许待托拽结点到自己前面,则返回true
    
                var pNode = targetNode.getParentNode();
    
                if (pNode && pNode.dropInner === false) {
    
                    return false;
    
                } else {
    
                    for (var i=0,l=nodes.length; i<l; i++) {                                    //遍历所有结点,三个条件 1.存在父结点 2.托拽结点和目标结点的父结点不相同 3.托拽结点的父结点不允许外出
                                                                                                //只要三者不同时成立,便可以移动到目标结点的前面
    
                        var curPNode = nodes[i].getParentNode();
    
                        if (curPNode && curPNode !== targetNode.getParentNode() && curPNode.childOuter === false) {
    
                            return false;
                        }
                    }
                }
                return true;
            }
    
            function dropInner(treeId, nodes, targetNode) {
    
                if (targetNode && targetNode.dropInner === false) {
    
                    return false;
    
                } else {
    
                    for (var i=0,l=nodes.length; i<l; i++) {
    
                        if (!targetNode && nodes[i].dropRoot === false) {                       //1.不存在目标结点 2.托拽结点不能成为根结点  二者同时满足便返回false
    
                            return false;
    
                        } else if (nodes[i].parentTId && nodes[i].getParentNode() !== targetNode && nodes[i].getParentNode().childOuter === false || !targetNode.drop) {
    
                                                                                                //1.存在目标结点 2.托拽结点的根结点不是目标结点 3.托拽结点的根结点不允许外出
                                                                                                //三者同时成立则返回false
                                                                                                //目标结点不允许托拽到此处返回false
    
                            return false;
                        }
                    }
                }
                return true;
            }
    
            function dropNext(treeId, nodes, targetNode) {
    
                var pNode = targetNode.getParentNode();
    
                if (pNode && pNode.dropInner === false) {                                       //目标结点的根结点不允许进入子结点
    
                    return false;
    
                } else {                                                                        //同dropPrev
    
                    for (var i=0,l=nodes.length; i<l; i++) {
    
                        var curPNode = nodes[i].getParentNode();
    
                        if (curPNode && curPNode !== targetNode.getParentNode() && curPNode.childOuter === false) {
    
                            return false;
                        }
                    }
                }
                return true;
            }
    
    
    
            function onDrag(event, treeId, treeNodes) {
    
    
            }
            function onDrop(event, treeId, treeNodes, targetNode, moveType, isCopy) {
    
    
            }
    
    
          
          $(document).ready(function(){
             $.fn.zTree.init($("#sys"), setting, nodes);
          });
       </SCRIPT>
    </HEAD>
    
    <BODY>
    <div class="content_wrap">
       <div class="zTreeDemoBackground left">
          <ul id="sys" class="ztree"></ul>
       </div>
    </div>
    </BODY>
    </HTML>
  • 相关阅读:
    每次阅读外文技术资料都头疼,终于知道原因了。
    前端利器躬行记(6)——Fiddler
    前端利器躬行记(5)——Git
    前端利器躬行记(4)——webpack进阶
    前端利器躬行记(3)——webpack基础
    xshell的快捷命令
    本机,同机房,同城,异地,不同城,腾讯云ping延时值
    Redis入门指南(第2版) Redis设计思路学习与总结
    与MySQL传统复制相比,GTID有哪些独特的复制姿势?
    iptables的conntrack表满了导致访问网站很慢
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700643.html
Copyright © 2011-2022 走看看