JavaScript递归菜单栏

HTML就一个div大框架

 <div class="treemenu"></div>

重中之重的JavaScript部分他来啦!

  注释也很清楚哟家人们!

let data;
let arr = [];
let cons;let xhr = new XMLHttpRequest();
// 设置请求方式和请求地址
xhr.open('get', './js/tree.json', true);
// 发送请求
xhr.send();
// 接收返回的响应数据
xhr.onreadystatechange = function () {if (xhr.readyState == 4 && xhr.status == 200) {data = JSON.parse(xhr.responseText);// 调用展示商品的函数// console.log(data);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, []);// 将当前节点加入到父节点的 children 数组中arr.push(data[i]);}}return arr;}arr = inn(data, 0, []);console.log(arr);rendertree(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 onclick="show(this)" class="tree_flex"> <img src="${data[i].icon}" alt="" class="con">${data[i].name} <span><img src="./img/jtt.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>`;    // 关闭树的容器document.getElementsByClassName('treemenu')[0].innerHTML = str; // 将整棵树渲染到页面上的指定位置return str; // 返回树的 HTML 字符串
}// 获取所有类名为 'tree_left' 的元素集合
let tree_left = document.getElementsByClassName('tree_left');// 定义展开或折叠子节点的函数
function show(obj) {let children = obj.nextElementSibling; // 获取当前节点的下一个兄弟元素,即子节点容器obj.querySelector('.cons').style.transition = "transform 1s"; // 设置箭头图标的过渡效果为1秒// 判断子节点容器的显示状态if (children.style.display == 'block') {// 如果子节点容器是显示的,则隐藏它children.style.display = 'none'; // 隐藏子节点容器obj.querySelector('.cons').style.transform = "rotate(0deg)"; // 将箭头图标旋转角度设为0度,折叠状态} else {// 如果子节点容器是隐藏的,则显示它children.style.display = 'block'; // 显示子节点容器obj.querySelector('.cons').style.transform = "rotate(180deg)"; // 将箭头图标旋转角度设为180度,展开状态obj.querySelector('.cons').style.transition = "transform 1s"; // 设置箭头图标的过渡效果为1秒}
}

CSS样式包含了彩色小背景!

body {margin: 0;padding: 0;display: flex;justify-content: center;align-items: center;height: 100vh;background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);background-size: 400% 400%;animation: gradientAnimation 15s ease infinite;font-family: Arial, sans-serif;user-select: none;
}@keyframes gradientAnimation {0% {background-position: 0% 50%;}50% {background-position: 100% 50%;}100% {background-position: 0% 50%;}
}.treemenu {width: 30%;height: 700px;font-weight: 700;}.con {width: 15px;height: 15px;float: left;margin-top: 7px;
}.tree_wrap {margin-left: 20px;line-height: 30px;
}.tree_wrap :hover {
color: blue;
}.cons {width: 15px;height: 15px;margin-left: 2%;margin-top: 7px;
}

样式图:

想要假数据的私我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/388340.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode958. 二叉树的完全性检验,层序遍历的巧用

leetcode958. 二叉树的完全性检验 给你一棵二叉树的根节点 root &#xff0c;请你判断这棵树是否是一棵 完全二叉树 。 在一棵 完全二叉树 中&#xff0c;除了最后一层外&#xff0c;所有层都被完全填满&#xff0c;并且最后一层中的所有节点都尽可能靠左。最后一层&#xff0…

NAS 软件大盘点:瞧瞧哪个被你遗漏了

很多人都听说过NAS&#xff0c;也有很多人正在使用NAS&#xff0c;而NAS用户通常需要安装一些软件来扩展其功能&#xff0c;毕竟NAS的功能实在是太多了&#xff0c;光是部署与调试就要耗费大量的时间&#xff0c; 小宝集合了NAS相关实用工具&#xff0c;无论是群晖、威联通还是…

华硕电脑怎么录屏?3个高效实用的方法

华硕电脑作为一款备受青睐的电脑品牌&#xff0c;拥有丰富的功能和工具&#xff0c;其中包括强大的录屏功能。然而&#xff0c;对于许多华硕电脑用户来说&#xff0c;如何利用这一功能可能会感到困惑。 本文将带您探索华硕电脑的录屏功能&#xff0c;为您揭示华硕电脑怎么录屏…

Web安全学习顺序:从零到精通的指南

随着互联网的迅猛发展&#xff0c;Web安全已成为一个日益重要的领域。无论是企业还是个人&#xff0c;都需要关注并提升自身的Web安全防护能力。对于初学者而言&#xff0c;如何系统地学习Web安全知识&#xff0c;掌握相关技能&#xff0c;成为了一个亟待解决的问题。本文将为你…

vue-cli搭建项目笔记

1. 在指定位置打开终端 2. 运行 指令 vue create xtx选择 vue2 等待创建完成。。。。。 大概5.52s完成 3.启动项目 进入 项目 目录 cd xtx 启动 yarn run serve 4. 访问 浏览器 访问 localhost:8080 5. 项目开发 清空项目 App.vue 注意&#xff1a;每一个vue组件中的…

ubuntu20复现NBV探索

官网代码 后退地平线下一个最佳景观规划师 这个代码有些久远&#xff0c;issue里面有人已经在ubuntu20里面使用了3dmr&#xff0c;但是他那个代码我也运行不成功&#xff0c;docker网络一直也不佳&#xff0c;所以还是自己重新修改源码靠谱。 最终实现的代码等有时间上传到gi…

解锁开发新纪元:GPT-4o mini的实战探索与效率革命

&#x1f308;所属专栏&#xff1a;【其它】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

matlab中的双层数值积分

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

前端面试宝典【设计模式】【2】

欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例:每一期专栏都将深入剖析真实的前端面试案例,从基础知…

LLC数字控制TMS320F28034,2-根据原理图配置GPIO控制引脚

LLC数字控制TMS320F28034&#xff0c;2-根据原理图配置GPIO控制引脚 LLC数字控制TMS320F28034&#xff0c;2-根据原理图配置GPIO控制引脚1 TMS320F280341.1 GPIO概述1.2 GPIO寄存器说明1.3 GPIO寄存器使用注意事项 2 项目原理图介绍2.1 GPIO使用介绍2.2 功能引脚使用说明 3 软件…

maven项目容器化运行之4-子模块利用Jenkins和maven使用docker插件调用远程docker构建服务

一.背景 之前期望把开发和部署分开&#xff0c;在上篇文章maven项目容器化运行之3-优雅的利用Jenkins和maven使用docker插件调用远程docker构建服务并在1Panel中运行-CSDN博客已经实现了。主要思路是开发配置了pom文件&#xff0c;但是不管docker镜像打包。提交代码库后&#x…

Kubernetes中间件监控指标解读

监控易是一款功能强大的IT监控软件&#xff0c;能够实时监控和分析各种IT资源和应用的状态&#xff0c;为企业提供全面而深入的监控服务。在Kubernetes中间件监控方面&#xff0c;监控易提供了详尽的监控指标&#xff0c;帮助用户全面了解Kubernetes集群的运行状态和性能表现。…

Nginx 反向代理https域名接口的注意事项

网络环境条件及实际调用需求如下图所示&#xff1a; 如图&#xff0c;要点如下&#xff1a; 应用实际请求的协议是 http&#xff0c;而通过 nginx 反向代理的最终接口是 https应用实际请求的域名是 mynginx.com&#xff0c;而通过 nginx 反向代理的最终接口域名是 api.weixin.…

[C++] vector对比list deque的引出

文章目录 list与vector的对比双端队列dequedeque的特性deque的底层实现原理内存结构块表&#xff08;Block Array&#xff09;块&#xff08;Block&#xff09; 插入与删除两端插入两端删除 随机访问如何计算位置 迭代器设计 总结 list与vector的对比 vector与list都是STL中非…

【python】PyQt5中QRadioButton的详细用法教程与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

[windows] 关于多线程中使用SendMessage

https://developer.aliyun.com/article/228325

@antv/x6 利用工具,在节点的左上角,或者节点的右上角,增加一个X的红色删除小按钮。

1、上个图&#xff1a; 官方地址&#xff1a;https://x6.antv.antgroup.com/tutorial/intermediate/tools 2、鼠标移上去&#xff0c;左上角会有一个删除小按钮&#xff0c;这个是x6自动的功能&#xff0c;只要稍微写二行代码就实现了&#xff1a; graph.on(node:mouseenter,…

leetcode 矩阵专题——java实现

73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 关键在于&#xff1a;一次扫描全表…

【云服务器】vscode + onethingAi + SSH远程连接

通过VS code远程连接服务器&#xff0c;并进行上传和下载文件操作_vs code 上传制定文件-CSDN博客 vscode远程连接服务器&#xff08;remote ssh&#xff09;上传本地文件到服务器(sftp)_vscode上传文件到服务器-CSDN博客 vscode连接远程服务器&#xff08;傻瓜式教学&#x…

苹果电脑怎么录制屏幕?3招教你轻松录制,高效实用

随着数字化时代的快速发展&#xff0c;屏幕录制已经成为我们日常工作和生活中不可或缺的一部分。它不仅是展示产品、教授知识、分享经验的重要工具&#xff0c;更是我们展现个性和创造力的新舞台。在苹果电脑上&#xff0c;屏幕录制功能的应用更是将这一体验推向了新的高度。 …