这里就不多叨叨啦!只是换了种写法
let data; // 定义用于存储请求返回数据的变量
let arr = []; // 定义用于存储处理后的树形数据的数组
$(document).ready(function () {
let xhr = $.ajax({
url: './js/tree.json', // 请求地址
method: 'GET', // 请求方式
dataType: 'json', // 响应数据类型
success: function (response) {
data = response; // 将返回的 JSON 数据存储在 data 变量中
arr = tree_menue(data, 0, []); // 调用递归函数,从根节点开始构建树形结构
console.log(arr); // 打印构建完成的树形数据结构
rendertree(arr); // 调用渲染树的函数并传入树形数据
}
});
});
function tree_menue(data, pid, arr) {
for (let i = 0; i < data.length; i++) {
if (data[i].pid == pid) {
// 递归调用,构建当前节点的子节点数组
data[i].children = tree_menue(data, data[i].id, []);
// 将当前节点加入到父节点的 children 数组中
arr.push(data[i]);
}
}
return arr;
}
// 渲染树形结构的函数
function inn(data, pid, arr) {
for (let i = 0; i < data.length; i++) {
if (data[i].pid == pid) {
data[i].children = inn(data, data[i].id, []);
arr.push(data[i]);
}
}
return arr;
}
// 渲染树形结构的函数
function rendertree(data) {
let str = `<div class="tree_wrap">`;
for (let i = 0; i < data.length; i++) {
if (data[i].children.length > 0) {
str +=
`<div class="tree_flex">
<img src="${data[i].icon}" alt="" class="con">${data[i].name}
<span><img src="./img/wode.png" alt="" class="cons"></span>
</div>
<div style="display:none">`;
str += rendertree(data[i].children);
str += `</div>`;
} else {
str +=
`<div class="tree_left">
<img src="${data[i].icon}" alt="" class="con">${data[i].name}
</div>`;
}
}
str += `</div>`;
$('.treemenu').html(str); // 将树形结构渲染到页面上的指定位置
return str;
}
// 获取所有类名为 'tree_left' 的元素 进行添加点击事件
$(document).on('click', '.tree_flex', function () {
// 获取当前节点的下一个兄弟元素,即子节点容器
let children = $(this).next();
// 设置箭头图标的过渡效果为1秒
$(this).find('.cons').css('transition', 'transform 1s');
// 判断子节点容器的显示状态
if (children.css('display') == 'block') {
// 要是字节点是显示的,则隐藏它
// children.css('display', 'none');
children.hide(2000);
// 当不点击箭头的时候让箭头图标旋转角度为0度,折叠状态
$(this).find('.cons').css('transform', 'rotate(0deg)');
} else {
children.show(2000);
// 要是字节点是隐藏的,则显示它
// children.css('display', 'block');
// 当点击箭头后让箭头图标旋转角度为180度,展开状态
$(this).find('.cons').css('transform', 'rotate(180deg)');
// $(this).find('.cons').css('transition', 'transform 1s');
}
});
附带淡入淡出效果哟家人们