把zTree前的展開收起圖標改為三角形,且只有在點擊三角形圖標時才展開子節點解決方案


  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <meta charset="utf-8" />
  5     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6     <title>Title</title>
  7     <link href="JS/tool/zTree/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
  8     <script src="JS/jquery-1.11.1.min.js"></script>
  9     <script src="JS/tool/zTree/js/jquery.ztree.core-3.5.js"></script>
 10     <script src="JS/tool/zTree/js/jquery.ztree.excheck-3.5.js"></script>
 11     <style>
 12         .mainbody-left {
 13             position: absolute;
 14             top: 0;
 15             left: 0;
 16             padding-top: 52px;
 17             width: 230px;
 18             height: 100%;
 19             background: #292929;
 20             z-index: 99;
 21             overflow: auto;
 22         }
 23         .ztree {
 24             padding: 0;
 25         }
 26         .ztree * {
 27             font-size: 14px;
 28             font-family: "microsoft yahei";
 29         }
 30         .ztree li a {
 31             display: block;
 32             padding: 4px 18px;
 33             color: #fff;
 34             border: 1px #292929 solid;
 35         }
 36         .ztree li a:hover {
 37             background: #484848;
 38             border: 1px #484848 solid;
 39             text-decoration: none;
 40         }
 41         .ztree span, .ztree li ul.line {
 42             background: none;
 43         }
 44         .ztree li a.curSelectedNode {
 45             padding-top: 4px;
 46             background-color: #000;
 47             color: black;
 48             border: 1px #000 solid;
 49             opacity: 0.8;
 50         }
 51         .ztree li ul {
 52             padding: 0;
 53         }
 54         .ztree > li > a {
 55             padding-left: 36px;
 56         }
 57         .ztree > li > ul > li > a {
 58             padding-left: 54px;
 59         }
 60         .ztree > li > ul > li > ul > li > a {
 61             padding-left: 72px;
 62         }
 63         .ztree li a span.ico_open, .ztree li a span.ico_close, .ztree li a span.ico_docu {
 64             background: none;
 65         }
 66         .ztree li a span.ico_open::after {
 67             width: 0;
 68             height: 0;
 69             border: 4px solid transparent;
 70             border-left: 4px solid #808080;
 71             content: "";
 72             margin: 0;
 73             cursor: pointer;
 74             display: inline-block;
 75             position: relative;
 76             left: 0px;
 77             top: 6px;
 78             transform: rotate(90deg);
 79         }
 80         .ztree li a span.ico_close::after {
 81             width: 0;
 82             height: 0;
 83             border: 4px solid transparent;
 84             border-left: 4px solid #808080;
 85             content: "";
 86             margin: 0;
 87             cursor: pointer;
 88             display: inline-block;
 89             position: relative;
 90             left: 2px;
 91             top: 4px;
 92             transform: rotate(0deg);
 93         }
 94         .switch {
 95             display: none !important;
 96         }
 97     </style>
 98 </head>
 99 <body>
100 <div class="mainbody-left">
101     <div class="vvtree dept-tree left">
102         <ul id="menu_tree_left" class="ztree"></ul>
103     </div>
104 </div>
105 <script>
106 var settingLeft = {
107     view: {
108         dblClickExpand: false,//雙擊節點時,是否自動展開父節點的標識
109         showLine: false,//是否顯示節點之間的連線
110         showIcon: true,
111         fontCss: { 'color': 'white', 'font-weight': 'normal' },//字體樣式函數
112         selectedMulti: false //設置是否允許同時選中多個節點
113     },
114     check: {
115         //chkboxType: { "Y": "ps", "N": "ps" },
116         chkStyle: "checkbox",//復選框類型
117         enable: false //每個節點上是否顯示 CheckBox
118     },
119     data: {
120         simpleData: {//簡單數據模式
121             enable: true,
122             idKey: "id",
123             pIdKey: "pId",
124             rootPId: ""
125         }
126     },
127     callback: {
128         beforeClick: function (treeId, treeNode) {
129             zTree = $.fn.zTree.getZTreeObj("menu_tree_left");
130             if (!treeNode.isParent) {
131                 zTree.checkNode(treeNode, !treeNode.checked, true, true);//單擊勾選,再次單擊取消勾選
132             }
133         },
134         onClick: function (event, treeId, treeNode) {
135             zTree = $.fn.zTree.getZTreeObj("menu_tree_left");
136             if ($(event.target).hasClass('ico_close') || $(event.target).hasClass('ico_open')) {
137                 zTree.expandNode(treeNode);//如果是父節點,則展開該節點
138             } else {
139                 return;
140             }
141         },
142         onDblClick: function (treeId, treeNode) {
143             //code
144         }
145     }
146 };
147 
148 $(function () {
149     //初始化菜單樹
150     var zNodes = [
151         { id: 0, pId: -1, name: "一級部門", open: true },
152         { id: 1, pId: 0, name: "二級部門1", open: false },
153         { id: 2, pId: 1, name: "三級部門1" },
154         { id: 3, pId: 1, name: "三級部門2" },
155         { id: 4, pId: 0, name: "二級部門2", open: false },
156         { id: 5, pId: 4, name: "三級部門3" },
157         { id: 6, pId: 4, name: "三級部門4", open: false },
158         { id: 7, pId: 6, name: "四級部門1" },
159         { id: 8, pId: 6, name: "四級部門2" },
160         { id: 9, pId: 0, name: "二級部門3" },
161         { id: 10, pId: 0, name: "二級部門4" }
162     ];
163     $.fn.zTree.init($("#menu_tree_left"), settingLeft, zNodes);
164 });
165 </script>
166 </body>
167 </html>

修改beforeClick,並添加了onClick方法,當點擊的對象target擁有class:ico_close或ico_open時(也就是三角形圖標),才展開子節點,否則return(也可以做其他操作,自行選擇)。

onDblClick是雙擊事件。

以下是效果圖:

 

補充:

謝謝這位熱心的朋友@愛吃漁的熊 指出樣式存在點小問題:當渲染到四級菜單時,顯示不正常。

非常抱歉沒有詳細描述使用場景,這里做下補充。

分兩種情況:

1.如果是想把ztree菜單放在網頁左側導航區,確定子菜單不超過的級數(假設是4級),且想要在每個子菜單hover的時候修改背景顏色和占滿整行,可以采用以上的方法(逐步設置li a的padding值)

上面寫少了一級的樣式,這里加上:

.ztree li ul {
     padding: 0;
}
.ztree > li > a {
     padding-left: 36px;
}
.ztree > li > ul > li > a {
     padding-left: 54px;
}
.ztree > li > ul > li > ul > li > a {
      padding-left: 72px;
}
.ztree > li > ul > li > ul > li > ul > li > a {
      padding-left: 90px;
}

2.其他的就歸為第二種情況了,直接設置li ul的padding,菜單樣式無限制,逐級縮進

.ztree li ul {
    margin: 0;
    padding: 0 0 0 18px;
}

以上,請按需選取方案,謝謝閱讀~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM