把zTree前的展开收起图标改为三角形,且只有在点击三角形图标时才展开子节点解决方案

时间:2023-03-09 03:03:30
把zTree前的展开收起图标改为三角形,且只有在点击三角形图标时才展开子节点解决方案
 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Title</title>
<link href="JS/tool/zTree/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
<script src="JS/jquery-1.11.1.min.js"></script>
<script src="JS/tool/zTree/js/jquery.ztree.core-3.5.js"></script>
<script src="JS/tool/zTree/js/jquery.ztree.excheck-3.5.js"></script>
<style>
.mainbody-left {
position: absolute;
top: 0;
left: 0;
padding-top: 52px;
width: 230px;
height: 100%;
background: #292929;
z-index: 99;
overflow: auto;
}
.ztree {
padding: 0;
}
.ztree * {
font-size: 14px;
font-family: "microsoft yahei";
}
.ztree li a {
display: block;
padding: 4px 18px;
color: #fff;
border: 1px #292929 solid;
}
.ztree li a:hover {
background: #484848;
border: 1px #484848 solid;
text-decoration: none;
}
.ztree span, .ztree li ul.line {
background: none;
}
.ztree li a.curSelectedNode {
padding-top: 4px;
background-color: #000;
color: black;
border: 1px #000 solid;
opacity: 0.8;
}
.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 a span.ico_open, .ztree li a span.ico_close, .ztree li a span.ico_docu {
background: none;
}
.ztree li a span.ico_open::after {
width: 0;
height: 0;
border: 4px solid transparent;
border-left: 4px solid #808080;
content: "";
margin: 0;
cursor: pointer;
display: inline-block;
position: relative;
left: 0px;
top: 6px;
transform: rotate(90deg);
}
.ztree li a span.ico_close::after {
width: 0;
height: 0;
border: 4px solid transparent;
border-left: 4px solid #808080;
content: "";
margin: 0;
cursor: pointer;
display: inline-block;
position: relative;
left: 2px;
top: 4px;
transform: rotate(0deg);
}
.switch {
display: none !important;
}
</style>
</head>
<body>
<div class="mainbody-left">
<div class="vvtree dept-tree left">
<ul id="menu_tree_left" class="ztree"></ul>
</div>
</div>
<script>
var settingLeft = {
view: {
dblClickExpand: false,//双击节点时,是否自动展开父节点的标识
showLine: false,//是否显示节点之间的连线
showIcon: true,
fontCss: { 'color': 'white', 'font-weight': 'normal' },//字体样式函数
selectedMulti: false //设置是否允许同时选中多个节点
},
check: {
//chkboxType: { "Y": "ps", "N": "ps" },
chkStyle: "checkbox",//复选框类型
enable: false //每个节点上是否显示 CheckBox
},
data: {
simpleData: {//简单数据模式
enable: true,
idKey: "id",
pIdKey: "pId",
rootPId: ""
}
},
callback: {
beforeClick: function (treeId, treeNode) {
zTree = $.fn.zTree.getZTreeObj("menu_tree_left");
if (!treeNode.isParent) {
zTree.checkNode(treeNode, !treeNode.checked, true, true);//单击勾选,再次单击取消勾选
}
},
onClick: function (event, treeId, treeNode) {
zTree = $.fn.zTree.getZTreeObj("menu_tree_left");
if ($(event.target).hasClass('ico_close') || $(event.target).hasClass('ico_open')) {
zTree.expandNode(treeNode);//如果是父节点,则展开该节点
} else {
return;
}
},
onDblClick: function (treeId, treeNode) {
//code
}
}
}; $(function () {
//初始化菜单树
var zNodes = [
{ id: 0, pId: -1, name: "一级部门", open: true },
{ id: 1, pId: 0, name: "二级部门1", open: false },
{ id: 2, pId: 1, name: "三级部门1" },
{ id: 3, pId: 1, name: "三级部门2" },
{ id: 4, pId: 0, name: "二级部门2", open: false },
{ id: 5, pId: 4, name: "三级部门3" },
{ id: 6, pId: 4, name: "三级部门4", open: false },
{ id: 7, pId: 6, name: "四级部门1" },
{ id: 8, pId: 6, name: "四级部门2" },
{ id: 9, pId: 0, name: "二级部门3" },
{ id: 10, pId: 0, name: "二级部门4" }
];
$.fn.zTree.init($("#menu_tree_left"), settingLeft, zNodes);
});
</script>
</body>
</html>

修改beforeClick,并添加了onClick方法,当点击的对象target拥有class:ico_close或ico_open时(也就是三角形图标),才展开子节点,否则return(也可以做其他操作,自行选择)。

onDblClick是双击事件。

以下是效果图:

把zTree前的展开收起图标改为三角形,且只有在点击三角形图标时才展开子节点解决方案

补充:

谢谢这位热心的朋友@爱吃渔的熊 指出样式存在点小问题:当渲染到四级菜单时,显示不正常。

非常抱歉没有详细描述使用场景,这里做下补充。

分两种情况:

1.如果是想把ztree菜单放在网页左侧导航区,确定子菜单不超过的级数(假设是4级),且想要在每个子菜单hover的时候修改背景颜色和占满整行,可以采用以上的方法(逐步设置li a的padding值)

上面写少了一级的样式,这里加上:

.ztree li ul {
padding:;
}
.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:;
padding: 0 0 0 18px;
}

以上,请按需选取方案,谢谢阅读~