ztree

公司項目需要用到ztree,所以花了一天時間看了ztree的api做了一個項目需要用到的demo

1安裝

去到ztree官網下載https://gitee.com/zTree/zTree_v3


2需要用到的包

require('./ztree/jquery.ztree.all.min')
require('./ztree/jquery.ztree.core.min')
require('./ztree/jquery.ztree.excheck.min')
require('./ztree/jquery.ztree.exedit.min')
require('./ztree/jquery.ztree.exhide.min')

3html代碼

<ul id="treeDemo" class="ztree"></ul>
在原來的基礎上做了一個右鍵編輯菜單
<div class="my-menu" id="Menu">
<div class="menu-item" data-index="1">
  添加文件
</div>
<div class="menu-item" data-index="2">
  刪除文件
</div>
<div class="menu-item" data-index="3" onclick="rename()">
  重命名
</div>
<div class="menu-item" data-index="4">
  取消
</div>
</div>

4js代碼

var setting = {
  view: {
    dblClickExpand: false,
  },
  edit: {
    enable: false,
    renameTitle: "編輯節點名稱"
  },
  callback: {
    onRightClick: OnRightClick,
    onDblClick: zTreeOnDblClick
  }
};

var zNodes =[
  {id:2, name:"右鍵操作 2", open:true,
    children:[
      {id:21, name:"節點 2-1"},
      {id:22, name:"節點 2-2"},
      {id:23, name:"節點 2-3"},
      {id:24, name:"節點 2-4"}
    ]},
  {id:3, name:"右鍵操作 3", open:true,
    children:[
      {id:31, name:"節點 3-1"},
      {id:32, name:"節點 3-2"},
      {id:33, name:"節點 3-3"},
      {id:34, name:"節點 3-4"}
    ]}
];

function OnRightClick(event, treeId, treeNode) {
  if (!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) {
    zTree.cancelSelectedNode();
    showRMenu("root", event.clientX, event.clientY);
  } else if (treeNode && !treeNode.noR) {
    zTree.selectNode(treeNode);
    showRMenu("node", event.clientX, event.clientY);
  }
}

function showRMenu(type, x, y) {
  $("#Menu").show();
  if (type=="root") {
    $("#m_del").hide();
    $("#m_check").hide();
    $("#m_unCheck").hide();
  } else {
    $("#m_del").show();
    $("#m_check").show();
    $("#m_unCheck").show();
  }

  y += document.body.scrollTop;
  x += document.body.scrollLeft;
  rMenu.css({"top":y+"px", "left":x+"px", "visibility":"visible"});

  $("body").bind("mousedown", onBodyMouseDown);
}
function hideRMenu() {
  if (rMenu) rMenu.css({"visibility": "hidden"});
  $("body").unbind("mousedown", onBodyMouseDown);
}
function onBodyMouseDown(event){
  if (!(event.target.id

      == "rMenu" || $(event.target).parents("#rMenu").length>0)) {
    rMenu.css({"visibility" : "hidden"});
  }
}
var addCount = 1;
//增加
window.addTreeNode = function(){
  hideRMenu();
  var newNode = { name:"增加" + (addCount++)};
  if (zTree.getSelectedNodes()[0]) {
    newNode.checked = zTree.getSelectedNodes()[0].checked;
    zTree.addNodes(zTree.getSelectedNodes()[0], newNode);
  } else {
    zTree.addNodes(null, newNode);
  }
}
//刪除
window.removeTreeNode = function(){
  hideRMenu();
  var nodes = zTree.getSelectedNodes();
  if (nodes && nodes.length>0) {
    if (nodes[0].children && nodes[0].children.length > 0) {
      var msg = "要刪除的節點是父節點,如果刪除將連同子節點一起刪掉。\n\n請確認!";
      if (confirm(msg)==true){
        zTree.removeNode(nodes[0]);
      }
    } else {
      zTree.removeNode(nodes[0]);
    }
  }
}
//改名
window.rename=function(){
  hideRMenu();
  var nodes = zTree.getSelectedNodes(),
    treeNode = nodes[0];
  if (nodes.length == 0) {
    alert("請先選擇一個對象");
    return;
  }
  zTree.editName(treeNode);
}
//雙擊子節點改名
function zTreeOnDblClick(event, treeId, treeNode) {
  hideRMenu();

  var nodes = zTree.getSelectedNodes(),
    treeNode = nodes[0];
  if (nodes.length == 0) {
    alert("請先選擇一個對象");
    return;
  }
  zTree.editName(treeNode);
};

var zTree, rMenu;
$(document).ready(function(){
  $.fn.zTree.init($("#treeDemo"), setting, zNodes);
  zTree = $.fn.zTree.getZTreeObj("treeDemo");
  rMenu = $("#Menu");
  $(document).bind("click",function(e){
    $('#Menu').hide()
    return;
  });
  $('#Menu').bind("mousedown",function(event){
    event.stopPropagation();//重點,需要防止冒泡
    //改名代碼放到了html代碼裏,因爲遇到一個小bug
    if(event.target.dataset['index']==1){
      addTreeNode()
    }
    if(event.target.dataset['index']==2){
      removeTreeNode()
    }
    if(event.target.dataset['index']==4){
      $('#Menu').hide()
    }
  });
});

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章